bellman ford求调
查看原帖
bellman ford求调
1100066
Coral_Fox楼主2024/5/15 19:01
#include<bits/stdc++.h>
using namespace std;

struct edge{
	int u,v,w;
};

long long n,m,T,dis[2000001],flag;
vector<edge> e(6001);
bool bellmanford(){
	dis[1]=0;
	for(int i=1;i<=n+1;i++){
		flag=0;
		for(int j=1;j<=m+m;j++){
			if(dis[e[j].v]>dis[e[j].u]+e[j].w){
				dis[e[j].v]=dis[e[j].u]+e[j].w;
				flag=1;
			}
		}
	}
	if(flag==1) return 1;
	else return 0;
}

int main(){
	cin>>T;
	string ans[T+5];
	for(int i=1;i<=T;i++){
		cin>>n>>m;
		memset(dis,0x3f,sizeof(dis));
//		for(int j=1;j<=m;j++) dis[j]=0x3f3f;
		for(int j=1;j<=m;j++){
			int u,v,w;
			cin>>u>>v>>w;
			if(w>=0){
				e[j].u=u;
				e[j].v=v;
				e[j].w=w;
				e[j+m].u=v;
				e[j+m].v=u;
				e[j+m].w=w;
			}
			else{
				e[j].u=u;
				e[j].v=v;
				e[j].w=w;
			}
		}
		if(bellmanford()==1) ans[i]="YES";
		else ans[i]="NO";
	}
	for(int i=1;i<=T;i++) cout<<ans[i]<<endl;
	return 0;
}
2024/5/15 19:01
加载中...