WA 36分求助
查看原帖
WA 36分求助
385165
ZeroF楼主2023/8/12 07:55
#include<bits/stdc++.h>
#define int long long 
using namespace std;
struct Node{
	int to,next,dis;
}edge[114514];
int head[114514],tot,d[114514];
bool vis[114514];
int cnt[114514];
queue<int>q;
void add(int u,int v,int dis){
	edge[++tot].to=v,edge[tot].dis=dis;
	edge[tot].next=head[u],head[u]=tot;
}
int n,m;
void init(){
	memset(head,0,sizeof(head));
	memset(vis,0,sizeof(vis));
	memset(cnt,0,sizeof(cnt));
	for(int i=1;i<=tot;i++){
		edge[i].dis=0,edge[i].to=0,edge[i].next=0;
	}
	tot=0;
}
void spfa(int s){
	memset(d,0x3f,sizeof(d));
	d[s]=0;
	q.push(s);
	vis[s]=1;
	while(!q.empty()){
		int u=q.front();
		vis[u]=0;
		q.pop();
		for(int i=head[u];i;i=edge[i].next){
			int v=edge[i].to,dis=edge[i].dis;
			if(d[u]+dis<=d[v]){
				cnt[v]=cnt[u]+1;
				if(cnt[v]>=n){
					cout<<"YES"<<endl;
					return;
				}
				if(!vis[v]){
					q.push(v);
					vis[v]=1;
				}
				d[v]=d[u]+dis;
			}
		}
	}
	cout<<"NO"<<endl;
}
signed main(){
	int t;
	cin>>t;
	while(t--){
		init();
		cin>>n>>m;
		for(int i=1;i<=m;i++){
			int u,v,dis;
			cin>>u>>v>>dis;
			add(u,v,dis);
			if(dis>=0){
				add(v,u,dis);
			}
		}
		spfa(1);
	}
	return 0;
}
2023/8/12 07:55
加载中...