社区讨论

80分求调

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

讨论操作

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

当前回复
3 条
当前快照
1 份
快照标识符
@mk589ind
此快照首次捕获于
2026/01/08 17:11
上个月
此快照最后确认于
2026/01/10 22:25
上个月
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=100010;
int n,m,t;
int a,b,c;
struct edge{
	int v,w; 
};
vector<edge>g[N]; 
bool vis[N]; 
int cnt[N]; 
int dis[N];
queue<int>q;
bool spfa(int n,int s){ 
	memset(dis,0x3f,sizeof(dis));
	vis[s]=1,dis[s]=0;
	q.push(s);
	while(!q.empty()){
		int u=q.front();
		q.pop();
		vis[u]=0;
		for(int i=0;i<g[u].size();i++){
			int v=g[u][i].v,w=g[u][i].w;
			if(dis[v]>dis[u]+w){
				dis[v]=dis[u]+w;
				cnt[v]=cnt[u]+1;
				if(cnt[v]>=n) return false;
				if(!vis[v]) vis[v]=1,q.push(v);
			}
		}
	}
	return true;
} 
int main(){
	cin>>t;
	while(t--){
		cin>>n>>m;
		for(int i=0;i<=n;i++){
			g[i].clear();
		}
		memset(cnt,0,sizeof(cnt));
		memset(vis,0,sizeof(vis));
		for(int i=1;i<=m;i++){
			cin>>a>>b>>c;
			if(c>=0){
				g[a].push_back({b,c});
				g[b].push_back({a,c});
			}
			else g[a].push_back({b,c});
		}
		if(spfa(n,1)) cout<<"NO\n";
		else cout<<"YES\n";
	}
	return 0;
}

回复

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

正在加载回复...