#include<bits/stdc++.h>
using namespace std;
#define int long long
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
return s*w;
}
inline void write(int x){
if(x==0){putchar('0');return;}
int len=0,k1=x,c[10005];
if(k1<0)k1=-k1,putchar('-');
while(k1)c[len++]=k1%10+'0',k1/=10;
while(len--)putchar(c[len]);
}
const int N=1e4+5;
struct node{
int w,v;
};
vector<node>edge[N];
int dist[N],cnt[N];bitset<N>vis;
void init(int n){
for(int i=1;i<=n;i++)cnt[i]=0,dist[i]=INT_MAX;
vis.reset();
}
bool spfa(int n){
queue<int>q;
dist[1]=0,q.push(1),cnt[1]=1;
while(!q.empty()){
int top=q.front();q.pop();
vis[top]=0;
for(int i=0;i<edge[top].size();i++){
int w=edge[top][i].w,v=edge[top][i].v;
if(dist[v]>dist[top]+w){
dist[v]=dist[top]+w;
if(cnt[v]>=n)return 1;
if(!vis[v])q.push(v),cnt[v]++,vis[v]=1;
}
}
}
return 0;
}
signed main(){
int t=read();
while(t--){
int n=read(),m=read();
init(n);
for(int i=1;i<=m;i++){
int u=read(),v=read(),w=read();
edge[u].push_back({v,w});
if(w>=0)edge[v].push_back({u,w});
}
if(spfa(n))puts("YES");
else puts("NO");
}
return 0;
}