蒟蒻求助!!
查看原帖
蒟蒻求助!!
535996
Blanc_min楼主2022/10/13 19:47
#include<bits/stdc++.h>
using namespace std;
int dis[10005],n,m,q,bj[10005];
struct bb {
    int tot,son[1001],w[1001];
}hzx[10001];
struct bl {
    int dis,x;
    bool operator < (bl k) const {
        return dis<k.dis;
    }
};
priority_queue<bl> mp;
void dij(int x) {
    mp.push(bl{dis[x],x});
    while(!mp.empty()) {
        bl tmp=mp.top();
        mp.pop();
        if(bj[tmp.x]) continue;
        bj[tmp.x]=1;
        for(int i=1;i<=hzx[tmp.x].tot;i++) {
            int u=hzx[tmp.x].son[i];
            if(dis[u]>dis[tmp.x]+hzx[tmp.x].w[i]) {
                dis[u]=dis[tmp.x]+hzx[tmp.x].w[i];
                if(bj[x]==0) {
                    mp.push(bl{dis[u],tmp.x});
                }
            }
        }
    }
}
int main(){
    cin>>n>>m>>q;
    for(int i=1;i<=n;i++) {
        dis[i]=INT_MAX;
    }
    for(int i=1;i<=m;i++) {
        int x,y,z;
        cin>>x>>y>>z;
        int u=++hzx[x].tot;
        hzx[x].son[u]=y,hzx[x].w[u]=z;
        u=++hzx[y].tot;
        hzx[y].son[u]=x,hzx[y].w[u]=z;
    }
    dis[q]=0;
    dij(q);
    for(int i=1;i<=n;i++) {
        cout<<dis[i]<<' ';
    }
    return 0;
}
2022/10/13 19:47
加载中...