2 条题解

  • 1
    @ 2025-11-27 21:06:27
    #include <bits/stdc++.h>
    // #define int long long // 仅在需要大整数时使用,memset 数组为 0x3f 时去掉
    #define INF 0x3f3f3f3f
    #define PII pair<int, int>
    #define ULL unsigned long long
    #define PIII tuple<int, int, int>
    #define all(v) v.begin(), v.end()
    #define debug(a) cout << #a << " = " << a << endl;
    using namespace std;
    constexpr int N = 1 * 1e5 + 10, M = 2 * 1e5 + 10;
    
    int n, m;
    vector<PII> G[M];
    int dist[N];
    bool st[N]; 
    int Dijikstra() {
        memset(dist, 0x3f, sizeof(dist));
        memset(st, false, sizeof(st));
        priority_queue<PII, vector<PII>, greater<PII>> heap;
        heap.push(make_pair(0, 1));
        dist[1] = 0;
        while (heap.size()) {
            auto [d, u] = heap.top();
            heap.pop();
            if (st[u]) continue;
            st[u] = 1;
            for (auto [v, w] : G[u]) {
                if (dist[u] + w < dist[v]) {
                    dist[v] = dist[u] + w;
                    heap.push(make_pair(dist[v], v));
                }
            }
        }
        return dist[n];
    }
    void solve() {
        cin >> n >> m;
        for (int i = 0; i < m; i ++) {
            int u, v, w;
            cin >> u >> v >> w;
            G[u].emplace_back(v, w);
        }
    
        int ans = Dijikstra();
        if (ans >= INF / 2) cout << -1 << '\n';
        else cout << ans << '\n';
    }
    
    signed main() {
        ios::sync_with_stdio(0); cin.tie(nullptr), cout.tie(nullptr);
        int _ = 1;
        // cin >> _;
        while (_--) {
            solve();
        }
        return 0;
    }
    
    /**
     *    author: Nijika_jia
     *    description: C++17 Algorithm Template for Competitive Programming
     */
    

    信息

    ID
    5626
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    25
    已通过
    3
    上传者