求助!!!全RE
查看原帖
求助!!!全RE
836979
zxhnb楼主2023/7/20 17:22
#include<bits/stdc++.h>
using namespace std;
int n,m,head[100010],idx=0,to[300010],dis[300010],nxt[300010],w[300010],t,ans;
bool vis[3010];
queue<int> q;
void add(int u,int v,int k){
	idx++;
	w[idx]=k;
	to[idx]=v;
	nxt[idx]=head[u];
	head[u]=idx;
}
bool spfa(int x){
	q.push(x);
	vis[x]=1;
	dis[x]=0;
	while(!q.empty()){
		int k=q.front();
		q.pop();
		vis[k]=false;
		for(int i=head[k];i;i=nxt[i]){
			if(dis[to[i]]>dis[k]+w[i]){
				dis[to[i]]=dis[k]+w[i];
				vis[to[i]]++;
				if(vis[to[i]]>=n) return 1;
				if(!vis[to[i]]){
					q.push(to[i]);
					vis[to[i]]=1;
				}
			}
		}
	}
}
int main(){
	cin>>t;
	    while(!q.empty()) q.pop();
        memset(dis,0x3f,sizeof(dis));
        memset(vis,0,sizeof(vis));
        memset(w,0,sizeof(w));
        memset(nxt,0,sizeof(nxt));
        memset(head,0,sizeof(head));
	for(int i=1;i<=t;i++){
			int x,y,z;
			cin>>n>>m;
			for(int i=1;i<=m;i++){
				cin>>x>>y>>z;
				if(z>=0){
				add(x,y,z);
			    }
		    }
					int ans=spfa(1);
					if(ans) cout<<"YES"<<endl;
					else cout<<"NO"<<endl;
    }
	return 0;
} 
2023/7/20 17:22
加载中...