求助
查看原帖
求助
400333
qzilr楼主2021/9/20 14:54
#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+4;
struct node{
	int v,w,nxt;
}e[maxn<<1];
int head[maxn],tot=0,vis[maxn],d[maxn];
inline void add(int u,int v,int w){
	e[++tot]=(node){v,w,head[u]};
	head[u]=tot;
}
int main(){
	int n,m,s;
	scanf("%d%d%d",&n,&m,&s);
	while(m--){
		int u,v,w;
		scanf("%d%d%d",&u,&v,&w);
		add(u,v,w);
	}
	queue<int> q;
	q.push(s);
	for(int i=1;i<=n;i++)
		vis[i]=0,d[i]=1<<30;
	d[s]=0;
	while(!q.empty()){
		int u=q.front();
		q.pop();
		if(vis[u])
			continue;
		for(int i=head[u];i;i=e[i].nxt ){
			if(d[u]+e[i].w <d[(e[i].v )])
				d[e[i].v ]=d[u]+e[i].w ;
			q.push(e[i].v );
		}
		vis[u]=1;
	}
	for(int i=1;i<=n;i++)
		(vis[i])?printf("%d ",d[i]):printf("2147483647 ");
	return 0;
}
2021/9/20 14:54
加载中...