在线求助,那位大神能帮我看一下,一直第12点过不了
查看原帖
在线求助,那位大神能帮我看一下,一直第12点过不了
1159443
wangluochen楼主2024/7/2 09:53
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int h[N],e[N],w[N],ne[N],idx;
int vis[N],dist[N],cnt[N],n,m,t,u,v,x;
void add(int a,int b,int c){
	e[idx]=b;
	w[idx]=c;
	ne[idx]=h[a];
	h[a]=idx++;
}
void init(){
	memset(h,-1,sizeof h);
	idx=0;
}
bool spfa(){
	queue<int> q;
	memset(dist,0x3f,sizeof dist);
	memset(cnt,0,sizeof cnt);
	memset(vis,0,sizeof vis);
	for(int i=1;i<=n;i++){
		q.push(i);
		
		vis[i]=1;
	}
	while(!q.empty()){
		int k=q.front();
		q.pop();
		vis[k]=0;
		for(int i=h[k];i!=-1;i=ne[i]){
			int j=e[i];
			if(dist[j]>dist[k]+w[i]){
				dist[j]=dist[k]+w[i];
				cnt[j]=cnt[k]+1;
				
				if(cnt[j]>=n)return true;
				if(!vis[j]){
					q.push(j);
					vis[j]=1;
				}
			}
		}
	}
	return false;
}
int main(){
	init();
	cin>>t;
	for(int i=0;i<t;i++){
		cin>>n>>m;
		for(int j=0;j<m;j++){
			cin>>u>>v>>x;
			if(x>=0){
				add(u,v,x);
				add(v,u,x);
			}else{
				add(u,v,x);
			}
		}
		if(spfa())cout<<"YES"<<endl;
		else cout<<"NO"<<endl;
		init();
	}
} 

2024/7/2 09:53
加载中...