#include<bits/stdc++.h>
using namespace std;
const int inf=0x3f3f3f3f, N=2010, M=6010;
int n, m;
int to[N], ne[N], w[M], h[N], tot;
int d[N], cnt[N], vis[N];
void add(int a, int b, int c){
to[++tot]=b; w[tot]=c;
ne[tot]=h[a];h[a]=tot;
}
bool spfa(){
memset(d, 0x3f, sizeof d);
memset(vis, 0, sizeof vis);
memset(cnt, 0, sizeof cnt);
queue<int> q;
q.push(1); vis[1]=1; d[1]=0;
while(q.size()){
int u=q.front();q.pop();vis[u]=0;
for(int i=h[u];i;i=ne[i]){
int v=to[i];
if(d[v]>d[u]+w[i]){
d[v]=d[u]+w[i];
cnt[v]=cnt[u]+1;
if(++cnt[v]>=n) return 1;
if(!vis[v]) q.push(v), vis[v]=1;
}
}
}
return 0;
}
int main(){
int T; scanf("%d", &T);
while(T--){
tot=0; memset(h, 0, sizeof h);
scanf("%d%d", &n, &m);
for(int i=1;i<= m;i++){
int u, v, w;
scanf("%d%d%d", &u, &v, &w);
add(u, v, w);
if(w>=0) add(v, u, w);
}
puts(spfa()?"YES":"NO");
}
return 0;
}
求dalao帮助