社区讨论

qiuzhu

P3385【模板】负环参与者 3已保存回复 6

讨论操作

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

当前回复
6 条
当前快照
1 份
快照标识符
@m2u6um9x
此快照首次捕获于
2024/10/29 16:31
去年
此快照最后确认于
2025/11/04 15:45
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
int head[1000001],tot;
struct edge{
    int nxt,v,edge;
}t[1000001];
bool v[100001];
int d[100001],cnt[100001];
int n;
void add(int x,int y,int z){
    t[++tot].nxt=head[x];
    head[x]=tot;
    t[tot].v=y;
	t[tot].edge=z;
}
string spfa(int s){
	memset(d,0x3f3f,sizeof(d));
	memset(cnt,0,sizeof(cnt));
	memset(v,0,sizeof(v));
	queue<int> q;
	q.push(s);
	d[s]=0; v[s]=1;
	while(!q.empty()){
		int x=q.front();
		q.pop();
		v[x]=0;
		for(int i=head[x];i;i=t[i].nxt){
			if(d[t[i].v]>d[x]+t[i].edge){
				d[t[i].v]=d[x]+t[i].edge;
				cnt[t[i].v]=cnt[x]+1;
				if(cnt[t[i].v]>=n) return "YES";
				if(!v[t[i].v]){
					q.push(t[i].v);
					v[t[i].v]=1;
				}
			}
		}
	}
	return "NO";
}
signed main(){
	int T;
	cin>>T;
	while(T--){
		memset(t,0,sizeof(t));
		cin>>n;
    	for(int i=1;i<=n;i++){
    	    int u,v,w;
			cin>>u>>v>>w;
			
			add(u,v,w);
			if(w>=0) add(v,u,w);
    	}
		cout<<spfa(1)<<"\n";
	}
    return 0;
}

回复

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

正在加载回复...