求助(玄关)
查看原帖
求助(玄关)
1032960
Danny_chan楼主2024/8/17 10:03

70分

#include<bits/stdc++.h>
using namespace std;
const int maxx=(1<<31)-1;
int n,m,s;
int a[1010][1010];
int d[10010],st[10010];
int main(){
	cin>>n>>m>>s;
	memset(d,0x3f,sizeof(d));
	memset(a,0x3f,sizeof(a));
	while(m--){
		int x,y,z;
		cin>>x>>y>>z;
		a[x][y]=min(a[x][y],z);
	}
	
	d[s]=0;
	for(int i=0;i<n;i++){
		int t=-1;
		for(int j=1;j<=n;j++){
			if(st[j]==0&&(t==-1||d[j]<d[t])){
				t=j;
			}
		}
		st[t]=1;
		for(int j=1;j<=n;j++){
			d[j]=min(d[j],d[t]+a[t][j]);
		}
	}
	for(int i=1;i<=n;i++){
		if(d[i]==0x3f3f3f3f) cout<<maxx<<" ";
		else cout<<d[i]<<" ";
	}
	return 0;
}
2024/8/17 10:03
加载中...