社区讨论
10分 不知如何去重边 ~>_<~
P3385【模板】负环参与者 3已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @mhjhvltt
- 此快照首次捕获于
- 2025/11/04 02:49 4 个月前
- 此快照最后确认于
- 2025/11/04 02:49 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
int k,m,n,cnt,head[20005],dist[20005],a[20005];
bool vis[20005];
struct node {
int to,val,next;
} edge[80005];
void add(int x,int y,int z) {
cnt++;
edge[cnt].to=y;
edge[cnt].val=z;
edge[cnt].next=head[x];
head[x]=cnt;
}
bool spfa() {
memset(dist,0x3f,sizeof(dist));
dist[1]=0;
queue<int>q;
q.push(1);
a[1]++;
vis[1]=true;
while(q.size()) {
int t=q.front();
q.pop();
vis[t]=false;
for(int i=head[t]; i; i=edge[i].next) {
int j=edge[i].to;
if(dist[j]>dist[t]+edge[i].val) {
dist[j]=dist[t]+edge[i].val;
if(!vis[j]) {
q.push(j);
a[j]++;
if(a[j]>n)
{
return false;
}
vis[j]=true;
}
}
}
}
return true;
}
int main() {
cin>>k;
for(int i=1; i<=k; i++) {
cin>>n>>m;
for(int j=1;j<=m;j++)
{
int x,y,z;
cin>>x>>y>>z;
add(x,y,z);
}
if(spfa())
{
cout<<"NO"<<endl;
}
else cout<<"YES"<<endl;
}
return 0;
}
/*
1
9 16
1 2 -4
1 4 0
1 7 -4
1 4 9
2 3 -2
2 8 -3
2 5 11
2 5 4
2 7 6
3 5 -3
3 7 11
4 8 1
5 6 -2
5 6 8
6 9 -4
7 9 0
*/
回复
共 4 条回复,欢迎继续交流。
正在加载回复...