不是?!这不能错吧?
查看原帖
不是?!这不能错吧?
654763
smallpeople楼主2024/3/14 20:33
#include<bits/stdc++.h>
using namespace std;
const int N = 2005;

struct edge
{
	int to,cost;
};
int T,n,m;
int dis[N],vis[N],cnt[N];
vector <edge> p[N];
queue <int> q;

int spfa()
{
	//for(int i = 1;i <= n;i ++)dis[i] = 2147483647;
	dis[1] = 0;
	q.push(1);
	vis[1] = 1;
	
	while(!q.empty())
	{
		int u = q.front();
		q.pop();
		vis[u] = 0;
		
		for(int i = 0;i < p[u].size();i ++)
		{
			int v = p[u][i].to,l = p[u][i].cost;
			if(dis[v] > dis[u] + l)
			{
				dis[v] = dis[u] + l;
				cnt[v] = cnt[u] + 1;
				if(cnt[v] >= n)return 1;
				if(!vis[v])
				{
					vis[v] = 1;
					q.push(v);
				}
			}
		}
	}
	
	return 0;
}

int main()
{
	cin>>T;
	for(int l = 1;l <= T;l ++)
	{
		cin>>n>>m;
		for(int i = 1;i <= m;i ++)
		{
			int a,b,c;
			cin>>a>>b>>c;
			p[a].push_back(edge{b,c});
			if(c >= 0)p[b].push_back(edge{a,c});
		}
		
		if(spfa())cout<<"YES"<<'\n';
		else cout<<"NO"<<'\n';
	}
	
	return 0;
}

0pts代码555~

2024/3/14 20:33
加载中...