为什么?
查看原帖
为什么?
361799
_z_h_y_楼主2022/2/11 17:31
#include<bits/stdc++.h>
using namespace std;
int t,n,m,w;
int u,v,p,tot;
int head[250001];
long long d[250001],in[250001];
struct node {
	int next,to,quan;
} edge[520001];
void add(int u,int v,int w) {
	tot++;
	edge[tot].next=head[u];
	edge[tot].quan=w;
	edge[tot].to=v;
	head[u]=tot;
}
const int inf=1<<30;
bool v1[250001];
bool spfa(int s) {
	memset(in,0,sizeof(in));
	memset(v1,0,sizeof(v1));
	memset(d,inf,sizeof(d));
	queue<int>q;
	d[s]=0;
	v1[s]=0;
	q.push(s);
	in[s]++;
	while(!q.empty()) {
		int x=q.front();
		q.pop();
		v1[x]=0;
		for(int i=head[x]; i!=0; i=edge[i].next) {
			int iz=edge[i].quan,io=edge[i].to;
			if(d[io]>d[x]+iz) {
				d[io]=d[x]+iz;
				if(!v1[io]) { 
					q.push(io);
					v1[io]=1;
					if(++in[io]>=n) {
						return false;
					}
				}
			}
		}
	}
	return true;
}
int main() {
	cin>>t;
	while(t--) {
		bool flag=0;
		memset(edge,0,sizeof(edge));
		memset(head,0,sizeof(head));
		tot=0;
		cin>>n>>m;
		for(int i=1; i<=m; i++) {
			cin>>u>>v>>p;
			if(p>=0) {
				add(u,v,p);
				add(v,u,p);
			} else {
				add(u,v,p);
			}
		}
		for(int i=1; i<=n; i++) {
			if(!spfa(i)) {
				cout<<"YES"<<endl;
				flag=1;
				break;
			}
		}
		if(!flag) cout<<"NO"<<endl;
	}
	return 0;
}
2022/2/11 17:31
加载中...