#12 WA 求调玄关
查看原帖
#12 WA 求调玄关
1226844
ShaDouBuShi123楼主2025/8/4 14:48

#12 WA 求调玄关

#include <bits/stdc++.h>
using namespace std;
bool f[100005];
int h[100005];
long long dist[100005];

//struct edge{
//	int to,w,next;
//}e[200005];

vector< pair<int,int> > mp[114514]; 

int n,m,s,cnt=1,t;
//void add(int u,int v,int w)
////{
//	e[cnt].to=v;
//	e[cnt].w=w;
//	e[cnt].next=h[u];
//	
//	h[u]=cnt++;
//	return ;
//}

void mai()
{
	int u,v,w;
	cin >> n >> m;
	for (int i=1;i<=n;i++)mp[i].clear();
	//存图

	for(int i=1;i<=m;i++)
	{
		cin >> u >> v >> w;
		mp[u].push_back({v,w});
		if (w>=0)
		{
			mp[v].push_back({u,w});
		}
	}
	//if (n==4&&m==3&&t==1)
	//{
	//	cout << "NO" << endl;
	//	return;
	//}
	//初始化源点s到各节点的最短路 
	memset(dist,0x3f3f3f3f,sizeof(dist));
	//Bellman-Ford 算法 
	dist[1]=0;
	
	for (int i=1;i<n;i++)
	{
		bool f=false;
		for (int k=1;k<=n;k++)
		{
			for (int j=0;j<mp[k].size();j++)
			{
				if (dist[k]!=0x3f3f3f3f&&dist[mp[k][j].first]>dist[k]+mp[k][j].second)
				{
					dist[mp[k][j].first]=dist[k]+mp[k][j].second;
					f=true;
					//break;
				}
			}			
		}

		if (!f)break;
	} 
	bool flag=false;
	for (int i=1;i<=n;i++)
	{
		for (int j=0;j<mp[i].size();j++)
		{
			if (dist[i]!=0x3f3f3f3f&&dist[mp[i][j].first]>dist[i]+mp[i][j].second)
			{
				flag=true;
				break;
			}
		}
		if (flag)break;
	} 	
	
	//for(int i=1;i<=n;i++){
		// if(dist[i]>=0x3f3f3f)
		// 	cout<<"2147483647"<<" ";	
		// else
	//		cout<<dist[i]<<" ";
	//}
	
	/*for (int j=1;j<=m;j++)
	{
		if (dist[e[j].to>dist[e[j].next]+e[j].w])
		{
			cout << "YES" << endl;
			return 0;
		}
	}
	cout << "NO" << endl;*/
	if (flag)cout << "YES" << endl;
	else cout << "NO" << endl;
	return;
}

int main()
{
	cin >> t;
	for (int l=0;l<t;l++)
	{
		mai();
	}
}
2025/8/4 14:48
加载中...