社区讨论

spfa求助

P3385【模板】负环参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lrko85sg
此快照首次捕获于
2024/01/19 21:23
2 年前
此快照最后确认于
2024/01/20 08:59
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e3 + 9 , inf = 0x3f3f3f3f;
int t;
int n , m;
struct node{
	int to , val;
};
vector<node>v[maxn];
bool vis[maxn];
int num[maxn];
int dis[maxn];
bool spfa()
{
	memset(vis , false , sizeof(vis));
	memset(num , 0 , sizeof(num)); 
	memset(dis , inf , sizeof(dis));
	queue<int>q;
	q.push(1);
	dis[1] = 0;
	vis[1] = true;
	num[1]++;
	while(!q.empty())
	{
		int u = q.front();
		q.pop();
		if(num[u] >= n)
			return true;
		vis[u] = false;
		for(int i = 0; i < v[u].size(); i++)
		{
			int y = v[u][i].to , w = v[u][i].val;
			if(dis[y] > dis[u] + w)
			{
				dis[y] = dis[u] + w;
				q.push(y);
				vis[y] = true;
				num[y]++;
				if(num[y] >= n)
					return true;
			}
		}	
	}
	return false;
}
int main()
{
	cin >> t;
	while(t--)
	{
		for(int i = 1; i <= maxn; i++)
			v[i].clear(); 
		cin >> n >> m;
		while(m--)
		{
			int x , y , z;
			cin >> x >> y >> z;
			v[x].push_back({y , z});
			if(z >= 0) 
				v[y].push_back({x , z});
		}
		if(spfa())
			cout << "YES" << endl;
		else
			cout << "NO" << endl;
	}
	return 0;
}

样例过subtask#1全wa
悬关

回复

0 条回复,欢迎继续交流。

正在加载回复...