求助,#7 #8 TLE
查看原帖
求助,#7 #8 TLE
342941
ztjp13楼主2024/8/30 11:20
#include<bits/stdc++.h>
using namespace std;

#define int long long

const int N=4e3+5;

int t;
int n,m;
int tot;
int edge[N],ver[N],Next[N],head[N];
int vis[N],cnt[N],d[N];

inline int read(){
	int f=1,k=0;
	char c=getchar();
	while(c<'0'||c>'9'){ 
		if(c=='-') f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		k=k*10+c-'0';
		c=getchar(); 
	}
	return f*k;
}

void add(int x,int y,int z){
	edge[++tot]=z; ver[tot]=y; Next[tot]=head[x]; head[x]=tot;
}

void spfa(){
	queue<int>q;
	memset(d,0x3f,sizeof(d));
	d[1]=0;
	vis[1]=1;
	q.push(1);
	while(!q.empty()){
		int x=q.front();
		q.pop();
		vis[x]=0;
		for(int i=head[x];i;i=Next[i]){
			int y=ver[i];
			int z=edge[i];
			if(d[y]>d[x]+z){
				d[y]=d[x]+z;
				if(!vis[y]){
					q.push(y); vis[y]=1;
					cnt[y]=cnt[x]+1;
					if(cnt[y]>=n){
						cout<<"YES"<<endl;
						return;
					}
				}
			}
		}
	}
	cout<<"NO"<<endl;
}
									 
signed main(){							
	t=read();
	while(t--){
		memset(head,0,sizeof(head));
		memset(vis,0,sizeof(vis));
		memset(cnt,0,sizeof(cnt));
		tot=0;
		n=read(),m=read();
		for(int i=1;i<=m;i++){
			int x=read(),y=read(),z=read();
			if(z<0) add(x,y,z);
			else add(x,y,z),add(y,x,z); 
		}
		spfa();
	}
	return 0;
}
2024/8/30 11:20
加载中...