负环求助
查看原帖
负环求助
209808
银河AI楼主2021/4/12 22:00
#include<bits/stdc++.h>
#include<queue>
using namespace std;
const int N=4e3+1,M=3e3+1;
int t;
int n,m;
int u,v,w,flag;
struct edge{
	int to,ne,dis;
}e[M<<2];
int adj[N],l,vis[N],cnt[N],dis[N];
inline void add(int x,int y,int z){e[++l].to=y,e[l].ne=adj[x],e[l].dis=z,adj[x]=l;}
inline void SPFA(int st){
	queue<int> q;
	q.push(st);
	vis[st]=1;
	dis[st]=0;
	cnt[st]=1;
	while(!q.empty()) {
		int x=q.front();q.pop();
		vis[x]=0;
		for(int i=adj[x];i;i=e[i].ne){
			int y=e[i].to;
			if(!vis[y]&&dis[y]>dis[x]+e[i].dis){
				dis[y]=dis[x]+e[i].dis;
				cnt[y]++;
				if(cnt[y]>n){flag=1;return ;}
				q.push(y);
				vis[y]=1;
			}
		}
	}
}
int main(){
	scanf("%d",&t);
	while(t--){
		flag=l=0;
		memset(vis,0,sizeof(vis));
		memset(dis,0x7f7f7f7f,sizeof(dis));
		memset(cnt,0,sizeof(cnt));
		memset(adj,0,sizeof(adj));
		scanf("%d%d",&n,&m);
		for(int i=1;i<=m;i++){
			scanf("%d%d%d",&u,&v,&w);
			w>=0?add(u,v,w),add(v,u,w):add(u,v,w);
		}
		SPFA(1);
		if(flag) printf("YES\n");
		else printf("NO\n");
	}
	
}

WA了两个点,求助大佬

2021/4/12 22:00
加载中...