社区讨论
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 条回复,欢迎继续交流。
正在加载回复...