记录
#include<cstdio>
using namespace std;
const int MAXN=2005,MAXM=3005,INF=0x3f3f3f3f;
int u[2*MAXM],v[2*MAXM],w[2*MAXM],dis[MAXN];
void bellman_ford(int n,int m) {
for(int i=1;i<=n;i++)
dis[i]=INF;
dis[1]=0;
for(int i=1;i<n;i++) {
bool flag=true;
for(int j=1;j<=m;j++) {
if(dis[u[j]]+w[j]<dis[v[j]]) {
dis[v[j]]=dis[u[j]]+w[j];
flag=false;
}
}
if(flag)
break;
}
}
int main() {
int t;
scanf("%d",&t);
for(int i=1;i<=t;i++) {
int n,m,cnt=0;
scanf("%d %d",&n,&m);
for(int j=1,a,b,c;j<=m;j++) {
scanf("%d %d %d",&a,&b,&c);
cnt++;
u[cnt]=a;
v[cnt]=b;
w[cnt]=c;
if(c>=0) {
cnt++;
u[cnt]=b;
v[cnt]=a;
w[cnt]=c;
}
}
bellman_ford(n,cnt);
bool flag=false;
for(int i=1;i<=cnt;i++) {
if(dis[u[i]]+w[i]<dis[v[i]]) {
flag=true;
break;
}
}
if(flag)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}