bellman-ford求调
查看原帖
bellman-ford求调
688956
daitangchen2008楼主2024/8/31 13:31
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
struct node
{
	int u;
	int w;
};
vector<node>edge[200005];
int d[200005];
bool bellford()
{
	d[1]=0;
	bool flag;
	for(int i=1;i<=n;i++)
	{
		flag=false;
		for(int j=1;j<=n;j++)
		{
			if(d[j]==1e9)continue;
			for(int k=0;k<edge[j].size();k++)
			{
				node y=edge[j][k];
				int u=y.u;
				int w=y.w;
				if(d[u]>d[j]+w)
				{
					d[u]=d[j]+w;
					flag=true;
				}
			}
		}
		if(!flag)break;
	}
	return flag;
}
signed main()
{
	int T;
	cin>>T;
	while(T--)
	{
		cin>>n>>m;
		for(int i=1;i<=n;i++)
			d[i]=1e9;
		for(int i=1;i<=m;i++)
		{
			int x,y,z;
			cin>>x>>y>>z;
			node ed;
			ed.u=y;
			ed.w=z;
			edge[x].push_back(ed);
			ed.u=x;
			if(z>=0)
			edge[y].push_back(ed);
		}
		if(!bellford())
			cout<<"NO\n";
		else
			cout<<"YES\n";
	}
	return 0;
}
2024/8/31 13:31
加载中...