#1#3#4WA,dijkstra算法,求调
查看原帖
#1#3#4WA,dijkstra算法,求调
775208
Alvin1204楼主2024/8/6 10:07
```cpp
#include<bits/stdc++.h>
using namespace std;
struct Edge{int next,to,dis;}e[200010];
int head[200010],cnt;
void addedge(int from,int to,int dis){
	e[cnt].next=head[from];
	e[cnt].to=to;
	e[cnt].dis=dis;
	head[from]=cnt++;
	return ;
}
int n,m,s;
#define pi pair<int,int>
long long dis[100010];
int vis[100010];
void dijkstra(){
	memset(vis,0,sizeof vis);
	memset(dis,0x3f,sizeof dis);
	priority_queue<pi,vector<pi>,greater<pi> > q;
	dis[s]=0;vis[s]=1;//自己感觉这错了,但不知道怎么改
	q.push(make_pair(0,s));
	while(q.size()){
		int x=q.top().second;
		q.pop();
		for(int i=head[x];~i;i=e[i].next){
			int y=e[i].to;
			if(dis[y]>dis[x]+e[i].dis){
				dis[y]=dis[x]+e[i].dis;
				if(!vis[y])
					q.push(make_pair(dis[y],y)),vis[y]=1;//自己感觉这错了,但不知道怎么改
			}
		}
	}
	return ;
}
int main(){
	memset(head,-1,sizeof head);
	scanf("%d%d%d",&n,&m,&s);
	while(m--){
		int x,y,z;
		scanf("%d%d%d",&x,&y,&z);
		addedge(x,y,z);
	}
	dijkstra();
	for(int i=1;i<=n;i++) printf("%lld ",dis[i]);
	return 0;
} 
2024/8/6 10:07
加载中...