40分求助,diji+vec存图悬关
查看原帖
40分求助,diji+vec存图悬关
288506
OutsideR_楼主2024/7/26 11:30

RT

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,m,s;
ll INF=2147483647;
const int N=1e4+2;
vector<pair<ll,ll>> G[N];
ll u,v,w;
ll minn,k;
ll dis[N];
bitset<N> bo;
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin>>n>>m>>s;
	for(int i=1;i<=m;i++){
		cin>>u>>v>>w;
		G[u].push_back(make_pair(v,w));	
	}
	for(int i=1;i<=n;i++){
		G[i].push_back(make_pair(i,0));
		dis[i]=INF;
	}
	dis[s]=0;
	for(int i=1;i<=n;i++){
		minn=INF*2;
		k=0;
		for(auto t:G[i]){
			v=t.first;
			w=t.second;
			if(dis[v]<minn && !bo[v]){
				minn=dis[v];
				k=v;
			}
		}	
		bo[k]=1;
		for(auto t:G[k]){
			v=t.first;
			w=t.second;
			dis[v]=min(dis[v],dis[k]+w);
		}
	}
	for(int i=1;i<=n;i++)cout<<dis[i]<<' ';
	cout<<endl;
	return 0;
}

2024/7/26 11:30
加载中...