为啥Bellman-Ford只对#12悬关
查看原帖
为啥Bellman-Ford只对#12悬关
742221
Happy_Doggie楼主2023/12/4 21:31
#include<bits/stdc++.h>
using namespace std;
const int N=150010;
int dis[N],bak[N],n,m,u[N],v[N],w[N],check,flag;
int inf=99999999;
inline void init() {
	memset(dis,0,sizeof(dis));
	memset(bak,0,sizeof(bak));
}
int main() {
	int t;
	cin>>t;
	while(t--) {
		cin>>n>>m;
		init();
		for(int i=1;i<=m;i++) cin>>u[i]>>v[i]>>w[i];
		for(int i=1;i<=n;i++) dis[i]=inf;
		dis[1]=0;
		for(int k=1;k<=n-1;k++) {
			for(int i=1;i<=n;i++) bak[i]=dis[i];
			for(int i=1;i<=m;i++) 
				if(dis[v[i]]>dis[u[i]]+w[i]) 
					dis[v[i]]=dis[u[i]]+w[i];
			check=0;
			for(int i=1;i<=n;i++) 
				if(bak[i]!=dis[i]) {
					check=1;
					break;
				}
			if(check==0) break;
		}
		flag=0;
		for(int i=1;i<=m;i++) if(dis[v[i]]>dis[u[i]]+w[i]) flag=1;
		printf(flag ? "YES\n":"NO\n");
	}
	
	return 0;	
} 
2023/12/4 21:31
加载中...