求助:Dijkstra WA
查看原帖
求助:Dijkstra WA
1166052
Craft_Mine楼主2024/10/9 12:25

代码:

#include <bits/stdc++.h>
#define MaxPointNum 100000
#define MaxEdgeNum 200000
#define inf 2147483647
using namespace std;

int to[MaxEdgeNum+5],nxt[MaxEdgeNum+5],wgt[MaxEdgeNum+5];
int n,m,srt,cnt,fst[MaxPointNum+5],dis[MaxPointNum+5];
bool vis[MaxPointNum+5];

void add(int u,int v,int w){
	to[++cnt]=v;
	wgt[cnt]=w;
	nxt[cnt]=fst[u];
	fst[u]=cnt;
}

void dijkstra(){
	for(int i=1;i<=n;i++) dis[i]=inf;
	memset(vis,0,sizeof(vis));
	priority_queue<int> que;
	dis[srt]=0;
	que.push(srt);
	while(que.size()){
		int u=que.top();
		que.pop();
		if(vis[u]) continue;
		vis[u]=true;
		for(int i=fst[u];i;i=nxt[i]){
			int v=to[i];
			if(dis[u]+wgt[i]<dis[v]){
				dis[v]=dis[u]+wgt[i];
				if(!vis[v]) que.push(v);
			}
		}
	}
}

int main(){
	scanf("%d%d%d",&n,&m,&srt);
	for(int i=0;i<m;i++){
		int u,v,w;
		scanf("%d%d%d",&u,&v,&w);
		add(u,v,w);
	}
	dijkstra();
	for(int i=1;i<=n;i++) printf("%d ",dis[i]);
	return 0;
}
2024/10/9 12:25
加载中...