求条
查看原帖
求条
1079493
Hy13_xsm楼主2025/1/21 14:42
#include<bits/stdc++.h>
#define N 500005
#define inf 1000000007
using namespace std;
struct node{
	int to,val;
	friend bool operator <(node a,node b){
		return a.val>b.val;
	}
};
int n,m,s,dis[N],cnt[N],vis[N];
vector<node>g[N];
priority_queue<node>q;
void spfa()
{
	for(int i=1;i<=n;i++)
	dis[i]=inf;
	q.push({s,0});
	dis[s]=0;
	while(!q.empty())
	{
		int u=q.top().to;
		vis[u]=1;
		q.pop();
		for(int i=0;i<g[u].size();i++)
		{
			int v=g[u][i].to,w=g[u][i].val;
			if(dis[u]+w<=dis[v])
			{
				dis[v]=dis[u]+w;
				cnt[v]=cnt[u]+1;
				if(cnt[v]>=n){
					cout<<"NO";
					exit(0);
				}
				if(!vis[v]){
					q.push({v,dis[v]});
					vis[v]=1;
				}
			}
		}
	}
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
		int x,y,z;
		cin>>x>>y>>z;
		g[y].push_back({x,z});
	}
	s=n+1;
	for(int i=1;i<=n;i++)
	g[s].push_back({i,0});
	spfa();
	for(int i=1;i<=n;i++)
	cout<<dis[i]<<' ';
	return 0;
}
2025/1/21 14:42
加载中...