Why 80,玄关求条
查看原帖
Why 80,玄关求条
1059234
FamousKillerconan楼主2024/10/25 17:49
#include<bits/stdc++.h>
using namespace std;
#define FAST ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define ll long long
using PII=pair<int,int>;
const int N=1e5+5;
const int INF=0x3f3f3f3f; 
int vis[N],dis[N],n,m,cnt[N];
vector<PII>g[N];
bool spfa(int st){
	queue<int>que;
	vis[st]=1;
	dis[st]=0;
	que.push(st);
	while(!que.empty()){
		int u=que.front();
		que.pop();
		vis[u]=0;
		for(const auto &node:g[u]){
			int v=node.first,w=node.second;
			if(dis[v]>dis[u]+w){
				dis[v]=dis[u]+w;
				cnt[v]=cnt[u]+1;
				if(cnt[v]>=n)return 1;
				if(!vis[v]){
					vis[v]=1;
					que.push(v);
				}
			}
		}
	}
	return 0;
}
void solve(){
	for(int i=0;i<=n;i++){
		g[i].clear();
		dis[i]=INF;
		vis[i]=0;
		cnt[i]=0;
	}
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int u,v,w;
		cin>>u>>v>>w;
		g[u].push_back({v,w});
		if(w>=0)g[v].push_back({u,w});
	}
	if(spfa(1))cout<<"YES\n";
	else cout<<"NO\n";
}
int main(){
	FAST;
	int T=1;
	cin>>T;
	while(T--){
		solve();
	}
	return 0;
}
2024/10/25 17:49
加载中...