全部评论 3

  • const int N = 1010;N改成1000010就好了

    #include<bits/stdc++.h>
    using namespace std;
    
    const int N = 1000010;
    
    // 定义节点结构体
    struct node {
        int var, val;
        friend bool operator<(node a, node b) {
            return a.val > b.val;
        }
    };
    
    // 定义边结构体
    struct Edge {
        int to, dis, last;
    } e[N];
    
    int h[N], en, n, m, s, v[N], d[N];
    
    // 添加边到邻接表
    void add_edge(int from, int to, int dis) {
        e[++en].dis = dis;
        e[en].to = to;
        e[en].last = h[from];
        h[from] = en;
    }
    
    // Dijkstra算法
    void dijkstra() {
        memset(d, 0x3f, sizeof d);
        d[s] = 0;
        priority_queue<node> q;
        q.push({s, d[s]});
        while (!q.empty()) {
            node head = q.top();
            q.pop();
            int t = head.var, dt = head.val;
            if (v[t]) continue;
            v[t] = 1;
            for (int j = h[t]; j != 0; j = e[j].last) {
                int to = e[j].to, dis = e[j].dis;
                if (!v[to]) {
                    d[to] = min(d[to], dt + dis);
                    q.push({to, d[to]});
                }
            }
        }
    }
    
    int main() {
        cin >> n >> m >> s;
        for (int i = 1; i <= m; i++) {
            int u, v, w;
            cin >> u >> v >> w;
            add_edge(u, v, w);
        }
        dijkstra();
        for (int i = 1; i <= n; i++) {
            if (d[i] == 0x3f3f3f3f) cout << -1 << " ";
            else cout << d[i] << " ";
        }
        return 0;
    }
    

    1周前 来自 河南

    0
  • @AC君不是?10个测试点9个RE??数据加强了,不改一下题解吗?

    2026-02-28 来自 北京

    0
  • 不是?10个测试点9个RE??

    2025-07-19 来自 广东

    0
暂无数据

提交答案之后,这里将显示提交结果~

首页