#include<bits/stdc++.h>
using namespace std;
#define int long long
const int MAXN=30100*2;
int ver[MAXN],nxt[MAXN],head[MAXN],edge[MAXN],tot,cnt[MAXN],dis[MAXN];
bool inq[MAXN];
inline void add(int x,int y,int z){
ver[++tot]=y;
nxt[tot]=head[x];
edge[tot]=z;
head[x]=tot;
}
inline void clear(){
memset(head,0,sizeof(head));
memset(inq,0,sizeof(inq));
memset(cnt,0,sizeof(cnt));
memset(dis,0x7f,sizeof(dis));
memset(nxt,0,sizeof(nxt));
memset(ver,0,sizeof(ver));
memset(edge,0,sizeof(edge));
tot=0;
}
inline bool spfa(int n,int m){
queue<int> q;
q.push(1);
inq[1]=true;
cnt[1]=1;
dis[1]=0;
while(!q.empty()){
int now=q.front();
q.pop();
inq[now]=false;
if(cnt[now]>=n)return true;
for(int i=head[now];i;i=nxt[i]){
int x=now,y=ver[i],z=edge[i];
if(dis[y]>dis[x]+z){
dis[y]=dis[x]+z;
if(!inq[y]){
inq[y]=true;
cnt[y]++;
if(cnt[y]>=n)return true;
q.push(y);
}
}
}
}
return false;
}
inline void slove(){
int n,m;
scanf("%lld%lld",&n,&m);
for(int i=1;i<=m;i++){
int u,v,w;
scanf("%lld%lld%lld",&u,&v,&w);
add(u,v,w);
if(w>=0)add(v,u,w);
}
bool state=spfa(n,m);
if(state)puts("YES");
else puts("NO");
clear();
}
signed main(){
int T;
scanf("%lld",&T);
while(T--){
slove();
}
return 0;
}
WA #9 #10