求助,dijkstra模板第3个点WA
查看原帖
求助,dijkstra模板第3个点WA
370028
w24x1a24x楼主2022/8/26 19:31

RT,求大佬指点。代码如下:

#include<bits/stdc++.h>
using namespace std;
const int maxn=100010,maxm=500010;
struct edge{
	int to,dis,next;
};
edge e[maxm];
long long head[maxn],dis[maxn],cnt;
bool vis[maxn];
int n,m,s;
void add_edge(int u,int v,int d){
	cnt++;
	e[cnt].dis=d;
	e[cnt].to=v;
	e[cnt].next=head[u];
	head[u]=cnt;
}
struct node{
	int dis,pos;
	bool operator<(const node &x)const{
		return x.dis<dis;
	}
};
std::priority_queue<node> q;
void dijkstra(){
	dis[s]=0;
	q.push((node){0,s});
	while(!q.empty()){
		node tmp=q.top();
		q.pop();
		int x=tmp.pos,d=tmp.dis;
		if(vis[x]){
			continue;
		}
		vis[x]=1;
		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((node){dis[y],y});
				}
			}
		}
	}
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>m>>s;
	memset(dis,0x7f7f7f7f,sizeof(dis));
	for(int i=0;i<m;++i){
		int u,v,d;
		cin>>u>>v>>d;
		add_edge(u,v,d);
	}
	dijkstra();
	for(int i=1;i<=n;i++){
		if(dis[i]==0x7f7f7f7f){
			cout<<2147483647<<" ";
		}
		else{
			cout<<dis[i]<<" ";
		}
	}
	return 0;
}
2022/8/26 19:31
加载中...