WA on #12求调
查看原帖
WA on #12求调
781623
SudoXue楼主2024/10/24 11:38

rt

#include<bits/stdc++.h>
using std::queue;
using std::max;
using std::min;
using std::cin;
using std::cout;
# define N 500005
# define INF 0x3f3f3f3f
int head[N],ver[N],edge[N],Next[N];
int n,m,w,tot;
bool vis[N];
int dist[N],cnt[N];
queue<int>Q;
void ADD(int x,int y,int z) {
	ver[++tot]=y;
	edge[tot]=z;
	Next[tot]=head[x];
	head[x]=tot;
}
bool SPFA() {
	memset(vis,0,sizeof(vis));
	memset(dist,0,sizeof(dist));
	memset(cnt,0,sizeof(cnt));
	for(int i=1; i<=n; i++)
		Q.push(i),vis[i]=true;
	while(Q.size()) {
		int x=Q.front();
		Q.pop();
		vis[x]=0;
		for(int i=head[x]; ~i; i=Next[i]) {
			int y=ver[i],z=edge[i];
			if(dist[y]>dist[x]+z) {
				dist[y]=dist[x]+z;
				cnt[y]=cnt[x]+1;
				if(cnt[y]>=n)return true;
				if(!vis[y])
					Q.push(y),vis[y]=true;
			}
		}
	}
	return false;
}
int main() {
	int x,y,z,T;
	cin>>T;
	while(T--) {
		memset(head,-1,sizeof(head));
		tot=-1;
		cin>>n>>m;
		for(int i=1; i<=m; i++) {
			int u,v,w;
			cin>>u>>v>>w;
			if(w>=0) ADD(u,v,w),ADD(v,u,w);
			else ADD(u,v,w);
		}
		printf("%s\n",SPFA()?"YES":"NO");
	}
	return 0;
}
2024/10/24 11:38
加载中...