52pts求调
查看原帖
52pts求调
1097358
B_neutrino楼主2024/3/2 10:24

欢迎大佬解答

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10; 
int head[N],to[4*N],nxt[4*N],v[4*N],cnt,dis[N],n,m,k;
bool b[N];
void add(int x,int y,int w){
    to[++cnt]=y;
    v[cnt]=w;
    nxt[cnt]=head[x];
    head[x]=cnt;
}
priority_queue<pair<int,int> > q;
void dijkstra(int s){
	dis[s]=0;
    q.push(make_pair(0,s));
    while(!q.empty()){
        int x=q.top().second;
        q.pop(); 
        if(b[x]) continue;
        b[x]=1;
        for(int i=head[x];i;i=nxt[i]){
            int y=to[i],l=v[i];
            if(dis[y]>dis[x]+l){
                dis[y]=dis[x]+l;
                q.push(make_pair(-dis[y],y));
            }
        }
    }
}
int main(){
	scanf("%d%d%d",&n,&m,&k);
	memset(dis,0x3f,sizeof(dis));
    memset(b,0,sizeof(b));
    memset(head,-1,sizeof(head));
	for(int i=1;i<=m;i++){
		int x,y,z;
        scanf("%d%d%d",&x,&y,&z);
        add(x,y,z);
        add(y,x,z);
    }
    dijkstra(k);
    for(int i=1;i<=n;i++) printf("%d ",dis[i]);
    return 0;
}
2024/3/2 10:24
加载中...