啾啾孩纸叭,调了一上午了
  • 板块灌水区
  • 楼主StrFaith
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/10/10 13:24
  • 上次更新2024/10/10 17:49:54
查看原帖
啾啾孩纸叭,调了一上午了
970752
StrFaith楼主2024/10/10 13:24

为什么输出结果是0x3f3f3f3f啊??? dijk模板

#include <bits/stdc++.h>
using namespace std;
int n, m, s;
const int maxn = 5e5+1;
struct newedge{
    int u;
    int v;
    int w;
    int nxt;
    edge(int a, int b, int c) {
    u = a; v = b; w = c;
    }
}edge[maxn];
struct node{
    int id, dis;
    node(int a, int b){
        id = a; dis = b;
    }
    bool operator < (const node &a)const {
        return dis>a.dis;
    }
};
int head[maxn], cnt;
void addedge(int u, int v, int w) {
    cnt++;
    edge[cnt].v = v;
    edge[cnt].w = w;
    edge[cnt].nxt = head[u];
    head[u] = cnt;
}
int dis[maxn], visit[maxn];
void dijk(int s) {
    for(int i = 1;i <= maxn;i++) {
        head[i] = -1;
        edge[i].nxt = -1;
        dis[i] =(1 << 31) - 1;
    }
    priority_queue <node> g;
    g.push(node(s, dis[s]));
    while(!g.empty()) {
        struct node u = g.top();
        g.pop();
        if(visit[u.id]) continue;
        visit[u.id] = 1;
        for(int i = head[u.id];~i;i = edge[i].nxt) {
            newedge e = edge[i];
            if(visit[e.v]) continue;
            if(u.dis + e.w < dis[e.v]){
                dis[e.v] = u.dis + e.w;
                g.push(node(e.v, dis[e.v]));
            }
        }
    }

}
int main() {
    scanf("%d%d%d", &n, &m, &s);
    int a, b, c;
    for(int i = 1;i<=m;i++){
        scanf("%d%d%d", &a, &b, &c);
        addedge(a, b, c);
    }
    dijk(s);
    for(int i =1;i<=n;i++)
        printf("%d ", dis[i]);
    return 0;
}

2024/10/10 13:24
加载中...