90pts求调
查看原帖
90pts求调
605353
yrx0115楼主2024/3/9 15:45
#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
queue<int> q;
int p,t,cnt,s,check,h[6005],dis[2005],u[2005],m[2005];
struct q{
	int t;
	int n;
	int z;
}b[6005];
void add(int x,int y,int w){
	b[++cnt].t=y,b[cnt].z=w,b[cnt].n=h[x],h[x]=cnt;
}
void spfa(int qd){
	while(!q.empty()) q.pop();
	for(int i=1;i<=p;i++) dis[i]=0x7fffffff,u[i]=0,m[i]=0;
	q.push(qd);
	dis[qd]=0,u[qd]=1;
	while(!q.empty()){
		int c=q.front();
		if(check) return;
		q.pop();
		u[c]=0,m[c]++;
		for(int i=h[c];i;i=b[i].n){
			int v=b[i].t;
			if(dis[v]>dis[c]+b[i].z){
				dis[v]=dis[c]+b[i].z;
				if(!u[v]){
					q.push(v);
					u[v]=1;
				}
				if(m[v]>p) check=1;
			}
		}
	}
}
int main(){
	cin>>t;
	for(int j=1;j<=t;j++){
		memset(h,0,sizeof(h));
		memset(b,0,sizeof(b));
		int m,m2;
		check=0,cnt=0;
		cin>>p>>m;
		for(int i=1;i<=m;i++){
			int u,v,w;
			cin>>u>>v>>w;
			add(u,v,w);
			if(w>0) add(v,u,w);
		}
		spfa(1);
		if(check) cout<<"YES"<<endl;
		else cout<<"NO"<<endl;
	}
	
	return 0;
}
2024/3/9 15:45
加载中...