#include<bits/stdc++.h>
#include<queue>
using namespace std;
const int N=4e3+1,M=3e3+1;
int t;
int n,m;
int u,v,w,flag;
struct edge{
int to,ne,dis;
}e[M<<2];
int adj[N],l,vis[N],cnt[N],dis[N];
inline void add(int x,int y,int z){e[++l].to=y,e[l].ne=adj[x],e[l].dis=z,adj[x]=l;}
inline void SPFA(int st){
queue<int> q;
q.push(st);
vis[st]=1;
dis[st]=0;
cnt[st]=1;
while(!q.empty()) {
int x=q.front();q.pop();
vis[x]=0;
for(int i=adj[x];i;i=e[i].ne){
int y=e[i].to;
if(!vis[y]&&dis[y]>dis[x]+e[i].dis){
dis[y]=dis[x]+e[i].dis;
cnt[y]++;
if(cnt[y]>n){flag=1;return ;}
q.push(y);
vis[y]=1;
}
}
}
}
int main(){
scanf("%d",&t);
while(t--){
flag=l=0;
memset(vis,0,sizeof(vis));
memset(dis,0x7f7f7f7f,sizeof(dis));
memset(cnt,0,sizeof(cnt));
memset(adj,0,sizeof(adj));
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d%d%d",&u,&v,&w);
w>=0?add(u,v,w),add(v,u,w):add(u,v,w);
}
SPFA(1);
if(flag) printf("YES\n");
else printf("NO\n");
}
}
WA了两个点,求助大佬