爆0求调(QAQ)
查看原帖
爆0求调(QAQ)
1127560
SR_G_B_ysqd1602楼主2024/7/19 11:06

用的dijkstra

#include<bits/stdc++.h>
using namespace std;
//70pts
int n,m,s,y,v,x;
int dis[500001],value[500001],h[10001],nxt[500001],to[500001],cnt;
const int d=INT_MAX;
bool vis[10001];
void dijkstra(){
	int minn=d,u=0;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(dis[j]<minn&&!vis[j])
				minn=dis[j],u=j;
		}
		vis[u]=1;
		for(int j=h[u];j;j=nxt[j]){
			if(!vis[j]&&value[u]<d&&dis[u]+value[j]<dis[to[j]]){
				dis[to[j]]=dis[u]+value[j];
			}
		}
	}
}
void add(int a,int b,int c){
	to[++cnt]=b;
	value[cnt]=c;
	nxt[cnt]=h[a];
	h[a]=cnt;
}
int main(){
	memset(value,d,sizeof(value));
	memset(dis,d,sizeof(dis));
	cin>>n>>m>>s;
	for(int i=1;i<=m;i++){
		scanf("%d%d%d",&y,&v,&x);
		add(y,v,x);
	}
	dis[s]=0;
	dijkstra();
	for(int i=1;i<=n;i++){
		printf("%d ",dis[i]);
	}
	return 0;
}
2024/7/19 11:06
加载中...