spfa求助
查看原帖
spfa求助
226167
呆呆的她啊楼主2023/11/26 21:30
#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#include<vector>
using namespace std;
const int inf=0x3f3f3f3f;
const int N=2010,M=6010;
int n,m;
int to[M],ne[M],w[M];
int d[N],cnt[N],vis[N];
struct node{
	int v1;
	int w1;
};
vector<node>e[N];
void add(int a,int b,int c){
	e[a].push_back((node){b,c});
}
bool spfa(){ 
	memset(d,0x3f,sizeof d); 
	memset(vis,0,sizeof vis);
	memset(cnt,0,sizeof cnt);
	queue<int>q; 
	q.push(1); vis[1]=1; d[1]=0; 
	while(q.size()){
		int u=q.front();q.pop();vis[u]=0;
		for(auto i:e[u]){
			int v=i.v1;	
			if(d[v]>d[u]+i.w1){
				d[v]=d[u]+i.w1;
				cnt[v]=cnt[u]+1; 
				if(cnt[v]>=n)return 1;//判边数
				if(!vis[v])q.push(v),vis[v]=1;
			}
		}
	}
	return 0;
}
int main(){
	int T; scanf("%d",&T);
	while(T--){
	cin>>n>>m;
		for(int i=1;i<=m;i++){
			int u,v,w;
			cin>>u>>v>>w;
			add(u,v,w);
			if(w>=0)add(v,u,w);;
		}
	if(spfa())cout<<"YES"<<endl;
		else cout<<"NO"<<endl;
	}
	return 0;
}
2023/11/26 21:30
加载中...