求助dij
查看原帖
求助dij
525998
huangjiasheng楼主2022/11/14 21:38
/*****************************************
备注:
******************************************/
#include <queue>
#include <math.h>
#include <stack>
#include <stdio.h>
#include <iostream>
#include <vector>
#include <iomanip>
#include <string.h>
#include <algorithm>
using namespace std;
#define int long long
const int N = 1e6 + 10;
const int INF = 2147483647;
int n,m,s;
int head[N],to[N],w[N],id,ne[N];
void add(int x,int y,int z)
{
	to[++id]=y ,ne[id]=head[x],w[id]=z,head[x]=id;
}
struct node
{
	int id,num;
	bool operator<(const node &a)const 
	{
		return num>a.num;
	}
};
long long dis[N],vis[N];
void dijkstra()
{
	for(int i=0;i<=n;i++)
		dis[i]=INF;
	dis[s]=0;
	priority_queue<node>p;
	p.push((node){s,0});
	while(!p.empty())
	{
		node t=p.top();
		p.pop();
		if(t.num!=dis[t.id]||vis[t.id]) 
			continue;
		vis[t.id] = 1;
		for(int i=head[t.id];i;i = ne[i])
		{
			if(!vis[to[i]]&&dis[to[i]]>t.num+w[i])
			{
				dis[to[i]]=t.num+w[i];
				p.push((node){to[i],dis[to[i]]});
			}
		}
	}
	for(int i=1;i<=n;i++)
	{
		if(dis[i]==INF)
		{
			cout<<"-1"<<" ";
		}
		else
		{
			cout<<dis[i]<< " ";
		}
	}
		
}
signed main()
{
	cin>>n>>m;
	s=1;
	for(int i=0;i<m;i++)
	{
		int x,y,z;
		cin>>x>>y>>z;
		add(x,y,z);
	}
	dijkstra();
	return 0;
}

题目没说有负环呀,为什么WA

2022/11/14 21:38
加载中...