救助,spfa#3寄了
查看原帖
救助,spfa#3寄了
637073
wujingfey楼主2023/8/4 12:01
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10,INF=1e9+10;
int n,m,s,dis[N],vis[N];//vis表示是否在队内 
vector<pair<int,int> > e[N];
queue<int> q;
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin>>n>>m>>s;
	for(int i=1;i<=m;i++){
		int a,b,c;
		cin>>a>>b>>c;
		e[a].push_back({b,c});
	}
	for(int i=1;i<=n;i++) dis[i]=INF;
	dis[s]=0;vis[s]=1;
	q.push(s);
	while(!q.empty()){
		int u=q.front();
		q.pop(); vis[u]=0;//出队后vis=0 
		for(auto p:e[u]){
			int v=p.first,w=p.second;
			if(dis[v]>dis[u]+w){
				dis[v]=dis[u]+w;//更新 
				if(!vis[v]) q.push(v),vis[v]=1;//不在队内,再入队 
			}
		}
	}
	for(int i=1;i<=n;i++) cout<<dis[i]<<" ";
	return 0;
}

2023/8/4 12:01
加载中...