求助SPFA判负环
  • 板块灌水区
  • 楼主yinxiangbo2030
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/7/16 13:44
  • 上次更新2024/7/16 14:47:33
查看原帖
求助SPFA判负环
1005576
yinxiangbo2030楼主2024/7/16 13:44
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll t,n,m,u,v,w,f[2005],d[2005];
vector<pair<ll,ll> >a[2005];
bool vis[2005];
queue<ll>q;
bool spfa(){
	while(!q.empty()){
		ll u=q.front();
		q.pop();
		vis[u]=0;
		for(auto it:a[u]){
			ll v=it.first,w=it.second;
			if(d[v]<=d[u]+w)continue;
			d[v]=d[u]+w;
			f[v]=f[u]+1;
			if(f[v]>=n)return 1;
			if(!vis[v])vis[v]=1,q.push(v);
		}
	}
	return 0;
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(nullptr);
	cout.tie(nullptr);
	cin>>t;
	while(t--){
		for(int i=0;i<=2003;i++)f[i]=0,d[i]=1e9,a[i].clear(),vis[i]=0;
		while(!q.empty())q.pop();
		cin>>n>>m;
		for(int i=1;i<=m;i++){
			cin>>u>>v>>w;
			if(w>=0){
				a[u].push_back({v,w});
				a[v].push_back({u,w});
			}else a[u].push_back({v,w});
		}
		q.push(1);
		vis[1]=1;
		if(spfa())cout<<"YES\n";
		else cout<<"NO\n";
	}
	return 0;
}

老是判不出来

2024/7/16 13:44
加载中...