刚学OI1秒,WA on #9,求大佬帮忙看看qwq
查看原帖
刚学OI1秒,WA on #9,求大佬帮忙看看qwq
473401
zcxnb楼主2023/8/12 10:08
#include<bits/stdc++.h>
#define int long long
#define read(a) scanf("%lld",&a)
using namespace std;
const int N=1e5+5,inf=1e5;
int n,t,m,l,r,z;
int dis[N],cnt[N],vis[N];
struct sb{
	int v,w;
};
queue<int>q;
signed main(){
//	freopen("a.in","r",stdin);
//	freopen("a.out","w",stdout);
	read(t);
	while(t--){
		vector<sb>a[N];
		read(n);read(m);
		for(int i=1;i<=m;i++){
			read(l);read(r);read(z);
			a[l].push_back((sb){r,z});
			if(z>=0){
				a[r].push_back((sb){l,z});
			}
		}
		while(!q.empty())  q.pop();
		for(int i=1;i<=n;i++){
			dis[i]=inf;
			cnt[i]=0;
			vis[i]=0;
		}
		dis[1]=0;
		vis[1]=1;
		q.push(1);
		int wssb=1;
		while(!q.empty()&&wssb){
			int k=q.front();
			q.pop();
			for(auto i:a[k]){
				if(dis[i.v]>dis[k]+i.w){
					dis[i.v]=dis[k]+i.w;
					cnt[i.v]=cnt[k]+1;
					if(cnt[i.v]>=n){
						printf("YES\n");
						wssb=0;
						break;
					}
					if(!vis[i.v]){
						q.push(i.v);
						vis[i.v]=1;
					}
				}
			}
			vis[k]=0;
		}
		if(wssb)  printf("NO\n");
	}
}
2023/8/12 10:08
加载中...