70求调
查看原帖
70求调
850062
zzxzczyz楼主2024/7/27 17:57
#include<bits/stdc++.h>
#define ll long long
using namespace std;
long long inf=0x3f3f3f3f;
int n,m,ver[100005],head[100005],Next[100005],we[100005],tot,cnt[100005];
int dis[100005],vis[100005];
void add(int x,int y,int z){
	ver[++tot]=y;
	we[tot]=z;
	Next[tot]=head[x];
	head[x]=tot;
}
bool spfa(int s){
	memset(dis,0x3f,sizeof(dis));
	queue<int>qu;
	dis[s]=0;
	for(int i=1;i<=n;i++){
		qu.push(i);
		vis[i]=1;
	}
	while(!qu.empty()){
		int u=qu.front();
		qu.pop();
		vis[u]=0;
		for(int i=head[u];i!=-1;i=Next[i]){
			int v=ver[i];
			int w=we[i];
			if(dis[v]>dis[u]+w){
				dis[v]=dis[u]+w;
				if(!vis[v]){
					vis[v]=1;
					qu.push(v);
					cnt[v]++;
					if(cnt[v]>=n){
					    return true;
					}
				}
			}
		}
	}
	return false;
}
int main(){
	int t;
	cin>>t;
	while(t--){
		tot=0;
		scanf("%d%d",&n,&m);
	memset(head,-1,sizeof(head));
	for(int i=1;i<=m;i++){
		int x,y,z;
		scanf("%d%d%d",&x,&y,&z);
		if(z<0)
			add(x,y,z);
		else{
			add(x,y,z);
			add(y,x,z);
		}
	}
	if(spfa(1)){
	    printf("YES\n");
	}
	else{
	    printf("NO\n");
	}
	}

	return 0;
}

2024/7/27 17:57
加载中...