50pts,subtask1#6到#10出错,#6WA,#7到#10RE
查看原帖
50pts,subtask1#6到#10出错,#6WA,#7到#10RE
560112
__Alexander__楼主2024/5/28 13:48
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
struct node{
	int u,v,w;
}s[2001];
int dis[2001],ds[2001];
void bakaisgod(){
	scanf("%lld%lld",&n,&m);
	int k=0;
	for (int i=1;i<=m;i++){
		scanf("%lld%lld%lld",&s[i].u,&s[i].v,&s[i].w);
		if (s[i].w>=0){
			k++;
			s[k+m]={s[i].v,s[i].u,s[i].w};
		}
	}
	m+=k;
	for (int i=1;i<=n;i++) dis[i]=1e18;
	dis[1]=0;
	for (int i=1;i<=n;i++){
		for (int j=1;j<=m;j++){
			int u=s[j].u,v=s[j].v,w=s[j].w;
			if (dis[u]!=1e18 and dis[u]+w<=dis[v]){
				dis[v]=dis[u]+w;
			}
		}
	}
	for (int i=1;i<=n;i++) ds[i]=dis[i];
	for (int j=1;j<=m;j++){
		int u=s[j].u,v=s[j].v,w=s[j].w;
		if (dis[u]!=1e18 and dis[u]+w<=dis[v]){
			dis[v]=dis[u]+w;
		}
	}
	for (int i=1;i<=n;i++){
		if (ds[i]!=dis[i]){
			printf("YES\n");
			return;
		}
	}
	cout<<"NO"<<endl;
	return;
}
signed main(){
	int t;
	cin>>t;
	while (t--){
		bakaisgod();
	}
	return 0;
}
2024/5/28 13:48
加载中...