#9 RE求助
查看原帖
#9 RE求助
511959
_Weslie_楼主2024/7/6 11:37
#include<bits/stdc++.h>
using namespace std;
int d[1000005];
int n,m,k;
int T;
struct node {
	int u,v,w,nxt;
} e[5000005];
int cnt,head[1000005],dis[1000005];
void add(int u,int v,int w) {
	e[++cnt].u=u;
	e[cnt].v=v;
	e[cnt].w=w;
	e[cnt].nxt=head[u];
	head[u]=cnt;
}
bool f=0,vis[1000005];
queue<int>q;
int tot[1000005];
void spfa(int now) {
	memset(dis,0,sizeof(dis));
	memset(vis,0,sizeof(vis));
	memset(tot,0,sizeof(tot));
	q.push(now);
	dis[now]=0;
	vis[now]=1;
	tot[now]=1;
	while(!q.empty()) {
		now=q.front();
		q.pop();
		vis[now]=0;
		for(int i=head[now]; i; i=e[i].nxt) {
			int v=e[i].v;
			if(dis[v]>dis[now]+e[i].w) {
				dis[v]=dis[now]+e[i].w;
				if(!vis[v]) {
					vis[v]=1;
					tot[v]=tot[v]+1;
					if(tot[v]>=n) {
						f=1;
						return;
					}
					q.push(v);
				}
			}
		}
	}
}
int read(){
	int f=1,ans=0;
	char ch=getchar();
	if(ch=='-'){
		f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		ans=ans*10+ch-'0';
		ch=getchar();
	}
	return ans*f;
}
int main() {
	T=read();
	while(T--) {
		n=read();m=read();
		while(!q.empty())q.pop();
		f=0;
		cnt=0;
		memset(head,0,sizeof(head));
		memset(dis,0,sizeof(dis));
		memset(vis,0,sizeof(vis));
		for(int i=1;i<=m;i++){
			int u,v,w;
			u=read();
			v=read();
			w=read();
			if(w>=0){
				add(u,v,w);
				add(v,u,w);
			}
			else add(u,v,w);
		}
		for(int i=1; i<=n; i++) {
			spfa(i);
			if(f)break;
		}
		if(f) {
			puts("YES");
		} else puts("NO");
	}
	return 0;
}
2024/7/6 11:37
加载中...