社区讨论

WA on Subtask#1 求条

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

讨论操作

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

当前回复
2 条
当前快照
1 份
快照标识符
@mhz4h9u9
此快照首次捕获于
2025/11/15 01:19
3 个月前
此快照最后确认于
2025/11/16 13:58
3 个月前
查看原帖
rt,可以要关注
CPP
#include<bits/stdc++.h>
#define maxn 2005
#define maxm 20005
#define inf 2147483647
using namespace std;
int n,m;
int dis[maxn],vis[maxn],cnt[maxn];
int h[maxn];
struct edge{
	int nxt;
	int to;
	int val;
}e[maxm];
int tot;
inline void add(int u,int v,int w){
	e[++tot].to=v;
	e[tot].val=w;
	e[tot].nxt=h[u];
	h[u]=tot;
}
inline void init(){
	memset(dis,0,sizeof(dis));
	memset(vis,0,sizeof(vis));
	memset(cnt,0,sizeof(cnt));
	memset(e,0,sizeof(e));
	memset(h,0,sizeof(h));
	tot=0;
}
inline bool SPFA(){
	queue<int>q;
	for(int i=1;i<=n;i++){
		dis[i]=inf;
		vis[i]=0;
	}
	q.push(1);
	dis[1]=0;
	vis[1]=1;
	cnt[1]++;
	while(!q.empty()){
		int u=q.front();
		q.pop();
		vis[u]=0;
		for(int i=h[u];i;i=e[i].nxt){
			int v=e[i].to;
			int w=e[i].val;
			if(dis[v]>(long long)dis[u]+w){
				dis[v]=dis[u]+w;
				vis[v]=1;
				q.push(v);
				cnt[v]++;
				if(cnt[v]>n)return 1;
			}
		}
	}
	return 0;
}
inline void solve(){
	init();
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		register int u,v,w;
		cin>>u>>v>>w;
		add(u,v,w);
		if(w>=0)add(v,u,w);
	}
	if(SPFA())cout<<"YES\n";
	else cout<<"NO\n";
}
int main(){
	int t;
	cin>>t;
	while(t--){
		solve();
	}
	return 0;
}

回复

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

正在加载回复...