RT 代码如下 马蜂不好,请见谅
//#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <math.h>
#include <algorithm>
#include <istream>
#include <string>
#include <queue>
#include <deque>
#include <stack>
#include <set>
#include <string.h>
#include <map>
#define Inf 1e8;
using namespace std;
struct edge{long long v,val,next;}e[500001];
long long f[500100];
long long n;
void build(long long u,long long v,long long val,long long id){
e[id].v=v;
e[id].val=val;
e[id].next=f[u];
f[u]=id;
}
bool vis[50100];
long long di[50100];
long long sum[50100];
bool spfa(){
queue<long long> q;
while(!q.empty())q.pop();
vis[0]=1;
di[0]=0;
q.push(0);
while(!q.empty()){
long long id=q.front();
q.pop();
vis[id]=0;
for(long long i=f[id];i!=0;i=e[i].next){
if(di[id]+e[i].val<di[e[i].v]){
di[e[i].v]=di[id]+e[i].val;
if(!vis[e[i].v]){
sum[e[i].v]++;
if(sum[e[i].v]>n) return false;
q.push(e[i].v);
vis[e[i].v]=1;
}
}
}
}
return true;
}
long long m;
long long t;
signed main(){
cin>>t;
while(t--){
cin>>n>>m;
memset(vis,0,sizeof(vis));
memset(f,0,sizeof(f));
memset(sum,0,sizeof(sum));
memset(di,0x7f,sizeof(di));
for(long long i=n;i>=1;i--){
build(0,i,0,2*m+i);
}
for (long long i=1;i<=m;i++){
long long u,v,val;
cin>>v>>u>>val;
build(u,v-1,val,i);
build(v-1,u,-val,m+i);
}
if(!spfa()) cout<<"true\n";
else cout<<"false\n";
}
return 0;
}