20求调
查看原帖
20求调
487934
ifnotab楼主2024/11/29 13:18
#include<bits/stdc++.h>
#define N 2010
#define pb push_back
#define pii pair<long long,long long>
#define fi first
#define se second
using namespace std;
vector<pii> adj[N];
bool spfa(int n){
	long long dis[N],vis[N],num[N];
	memset(dis,0x3f3f3f,sizeof(dis));
	memset(vis,0,sizeof(vis));
	memset(num,0,sizeof(num));
	queue<long long> q;
	q.push(1);
	dis[1]=0;
	vis[1]=1;
	while(!q.empty()){
		int u=q.front();
		q.pop();
		vis[u]=0;
		for(auto e:adj[u]){
			long long v=e.fi,w=e.se;
			if(dis[v]>dis[u]+w){
				num[v]=num[u]+1;
				dis[v]=dis[u]+w;
				if(num[v]>=n){
					return 1;
				}
				if(!vis[v]){
					q.push(v);
					vis[v]=1;		
				}
			}
		}
	}
	return 0;
}
void solve(){
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int u,v,w;
		cin>>u>>v>>w;
		adj[u].pb({v,w});
		if(w>=0){
			adj[v].pb({u,w});
		}
	}
	if(spfa(n)){
		cout<<"YES";
	}else{
		cout<<"NO";
	}
	cout<<endl;
}
int main(){
	//freopen("t.out","w",stdout);
	int T;
	cin>>T;
	while(T--){
		solve();
	}	
	return 0;
}
2024/11/29 13:18
加载中...