SPFA 28分 RE和WA 求助
查看原帖
SPFA 28分 RE和WA 求助
341801
W_SUN楼主2023/7/9 19:32
#include<bits/stdc++.h>
#define MAXN 6007
#define int long long
using namespace std;
int n,m,t;
int head[MAXN],nxt[MAXN],num=-1;
int var[MAXN],edge[MAXN];
int dis[MAXN],vis[MAXN],cnt[MAXN];  
void add_edge(int u,int v,int w){
	num++;
	var[num]=v;
	edge[num]=w;
	nxt[num]=head[u];
	head[u]=num;
}
int spfa(){
	queue<int> q;
	q.push(1);
	vis[1]=1;
	dis[1]=0;
	while(!q.empty()){
		int u=q.front();
		q.pop();
		vis[u]=0;
		for(int i=head[u];~i;i=nxt[i]){
			if(dis[var[i]]>dis[u]+edge[i]){
				dis[var[i]]=dis[u]+edge[i];
				cnt[var[i]]=cnt[u]+1;
				if(!vis[var[i]]){
					q.push(var[i]);
					vis[var[i]]=1;
					if(cnt[var[i]]>=n){
						return 0;
					}
				}
			}
		}
	}
	return 1;
}
signed main(){
	cin>>t;
	for(int i=1;i<=t;i++){
		memset(head,-1,sizeof(head));
		memset(nxt,0,sizeof(nxt));
		memset(dis,0x3f,sizeof(dis));
		memset(vis,0,sizeof(vis));
		memset(edge,0,sizeof(edge));
		memset(var,0,sizeof(var));
		cin>>n>>m;
		for(int i=1;i<=m;i++){
			int x,y,z;
			cin>>x>>y>>z;
			if(z>=0){
				add_edge(x,y,z);
				add_edge(y,x,z);
			}
			else{
				add_edge(x,y,z);
			}
		}
		if(spfa()==1){
			cout<<"NO"<<endl;
		}
		else{
			cout<<"YES"<<endl;
		}
	}
	return 0;
}
2023/7/9 19:32
加载中...