task0全T,求调
查看原帖
task0全T,求调
1012798
WoshiGuoba楼主2025/8/2 19:59
#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
const int N=1e6+10;
int n,m;
struct node{
	int v,w,next;
	node(){
		w=next=0;
	}
	node(int a,int b,int c){
		v=a,next=b,w=c;
	}
}adj[N];
int dis[N],h[N],idx=1;
bool f[N];
void insert(int x,int y,int z){
	adj[idx]=node(y,h[x],z);
	h[x]=idx;
	idx++;
}
queue<int> q;
int cnt[N];
void spfa(){
	memset(dis,0x3f,sizeof dis);
	memset(cnt,0,sizeof cnt);
	dis[1]=0;
	q.push(1);
	f[1]=1;
	while(!q.empty()){
		int ver=q.front();
		q.pop();
		f[ver]=0;
		for(int i=h[ver];i!=0;i=adj[i].next){
			int v=adj[i].v,w=adj[i].w;
			if(dis[v]>dis[ver]+w){
				dis[v]=dis[ver]+w;
				cnt[v]=cnt[ver]+1;
				if(cnt[v]>=n){
					cout<<"YES\n";
					return;
				}
				if(!f[v]){
					q.push(v);
					f[v]=1;
				}
			}
		}
	}
	cout<<"NO\n";
}
void solve(){
	memset(adj,0,sizeof adj);
	idx=1;
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int x,y,z;
		cin>>x>>y>>z;
		insert(x,y,z);
		if(z>=0) insert(y,x,z);
	}
	spfa();
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int t=1;
	cin>>t;
	while(t--){
		solve();
	}
	return 0;
}
2025/8/2 19:59
加载中...