在模板中拿到了50分,错误全部为应输出NO输出了YES
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
int tmp[100005];
struct node{
int v,w,next;
}edge[200005];
bool fl;
int head[100005],num,vis[200005];
void add(int u,int v,int w){
edge[++num].next=head[u];
head[u]=num;
edge[num].v=v;
edge[num].w=w;
}
void dfs(int ntmp,int id){
if(fl)return;
if(ntmp-tmp[id]<0){
fl=1;
return;
}
tmp[id]=ntmp;
for(int i=head[id];i;i=edge[i].next){
if(vis[i])continue;
vis[i]=true;
dfs(ntmp+edge[i].w,edge[i].v);
}
// tmp[id]=f;
}
signed main(){
// freopen("test.out","w",stdout);
int t;
cin>>t;
while(t--){
fl=0;
memset(tmp,0xaf,sizeof(tmp));
memset(head,0,sizeof(head));
memset(vis,false,sizeof(vis));
num=0;
cin>>n>>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);
}
dfs(0,1);
cout<<(fl?"YES\n":"NO\n");
}
return 0;
}
/*
1
8 14
1 2 5
1 7 -3
2 3 8
2 4 0
2 5 14
2 2 15
2 6 13
3 7 5
4 5 1
4 6 13
4 7 11
4 8 15
4 7 15
4 6 -2
*/