dij求助
查看原帖
dij求助
229366
Fast_IO楼主2022/2/18 18:55

今天打了遍板子,发现#6错了,但是单源最短路径(标准版)没错,请求大佬帮忙看看

#include<bits/stdc++.h>
#define int long long int
using namespace std;
const int N = 3e5+5;
const int M = 3e5+5;
const int INF = 1e18;
struct node{
	int to,dis,nxt;
}e[N];
int hd[M],dis[M],cnt;
bool vis[M];
int n,m,s;
void add(int u,int v,int dis){
	e[++cnt].dis=dis;
	e[cnt].to=v;
	e[cnt].nxt=hd[u];
	hd[u]=cnt;
}
struct node1{
	int dis,pos;
	bool operator < (const node1 & x)const{
		return x.dis<dis;
	}
};
priority_queue<node1> q;
void dijkstra(){
	dis[s]=0;
	q.push((node1){0,s});
	while(!q.empty()){
		node1 tmp=q.top();
		q.pop();
		int x=tmp.pos,d=tmp.dis;
		if(vis[x]) continue;
		vis[x]=1;
		for(int i=hd[x];i;i=e[i].nxt){
			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((node1){dis[y],y});
				}
			}
		} 
	}
}
signed main(){
	cin>>n>>m;
    s=1;
	for(int i=1;i<=n;i++) dis[i]=INF;
	for(int i=1;i<=m;i++){
		int u,v,val;
		cin>>u>>v>>val;
		add(u,v,val);
	}
	dijkstra();
	for(int i=1;i<=n;i++){
		cout<<dis[i]<<" ";
	}
	return 0;
}

2022/2/18 18:55
加载中...