bellmanford判负环90pts求助 #11WA
查看原帖
bellmanford判负环90pts求助 #11WA
678087
fangzichang楼主2022/8/8 15:35

rt,马蜂自认清晰求调
实在是没什么好多说的了

#include<bits/stdc++.h>
#define LL long long
using namespace std;
const int N=1e5+10;
int n,m,s,w;
struct edge {
	int v,w;
};
vector<edge> e[N];
int dis[N],vis[N];
bool bellmanford(){
	memset(dis,2147483647,sizeof(dis));
	dis[s]=0;
	bool flag;
	for(int i=1;i<=n;i++){
		flag=0;
		for(int u=1;u<=n;u++){
			if(dis[u]==2147483647) continue;
			for(auto ed:e[u]){
				int v=ed.v,w=ed.w;
				if (dis[v]>dis[u]+w){
					dis[v]=dis[u]+w;
					flag=true;
				}
			}
		}
		if(!flag) break;
	}
	return flag;
}

int main(){
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	int T;
	cin>>T;
	while(T--){
		cin>>n>>m;
		memset(e,0,sizeof(e));
		for(int i=1;i<=m;i++){
			int x,y,z;
			scanf("%d%d%d",&x,&y,&z);
			e[x].push_back({y,z});
			if(z>=0)e[y].push_back({x,z});
		}
		s=1;
		if(bellmanford()) puts("YES");
		else puts("NO");
	}
	return 0;
}
2022/8/8 15:35
加载中...