求调
查看原帖
求调
784704
kevin4楼主2023/12/4 22:11
#include<bits/stdc++.h>
using namespace std;
inline int read() {
	int x=0,f=1;
	char ch=getchar();
	while (ch<'0'||ch>'9') {
		if (ch=='-') f=-1;
		ch=getchar();
	}
	while (ch>='0'&&ch<='9') {
		x=x*10+ch-48;
		ch=getchar();
	}
	return x*f;
}
#define inf 0x7fffffff
int n,m,s,d[10001],minn,k,vis[10001];
vector<pair<int,int> >e[10001];
void dij(int s) {
	for(int i=1;i<=n;i++)d[i]=inf;
	d[s]=0;
	for(int i=1; i<n; i++) {
//		for(int j=1;j<=n;j++){
//			cout<<d[j]<<" ";
//		}
//		cout<<endl;
//		for(int j=1;j<=n;j++)cout<<e[j].size()<<endl;
		minn=inf;
		k=s;
		for(int j=1; j<=n; j++){
			if (!vis[j]&&minn>d[j]) {
				minn=d[j];
				k=j;
			}
		}
//		cout<<k<<endl<<minn<<endl;
		vis[k]=1;
		for(int j=0; j<e[k].size(); j++) {
			int tm=e[k][j].first;
			if(!vis[tm]&& minn+e[k][j].second<d[tm])d[tm]=minn+e[k][j].second;
		}
	}
}
signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	n=read();
	m=read();
	s=read();
	for(int i=1; i<=m; i++)e[read()].push_back(make_pair(read(),read()));
	dij(s);
	for(int i=1; i<=n; i++)cout<<d[i]<<" ";
	cout<<endl;
	return 0;
}

2023/12/4 22:11
加载中...