全部tle
查看原帖
全部tle
507534
YBaggio楼主2021/12/12 12:34
#include<bits/stdc++.h>
using namespace std;
const int maxn=100010,inf=1000000010;
int n,m,cnt,dis[maxn],head[maxn],to[2*maxn],ne[2*maxn],edge[2*maxn],start,d;
bool vis[maxn];
void dijkstra(){
	for(int i=1;i<=n;i++){
		int k,minn=inf;
		for(int j=1;j<=n;j++){
			if(!vis[j]&&dis[j]<minn){
				k=j;minn=dis[j];
			}
		}
		vis[k]=1;
		for(int j=head[k];j!=0;j=ne[j]){
			int v=to[j];
			if(dis[k]+edge[j]<dis[v]){
				dis[v]=dis[k]+edge[j];	
			}
		}
	}
	return;
}
int main(){
	memset(dis,127,sizeof(dis));
	scanf("%d%d%d",&n,&m,&start);dis[start]=0;
	for(int i=1;i<=m;i++){
		int u,v,w;
		scanf("%d%d%d",&u,&v,&w);
		edge[++cnt]=w;to[cnt]=v;ne[cnt]=head[u];head[u]=cnt;
	}   
	dijkstra(); 
	for(int i=1;i<=n;i++){
		printf("%d ",dis[i]);
	}
	return 0;
}

2021/12/12 12:34
加载中...