社区讨论

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 条回复,欢迎继续交流。

正在加载回复...