#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int maxn=2020;
const int maxm=6050;
int first[maxn],to[maxm],next[maxm],val[maxm],tot;
int t,n,m,dis[maxn],num[maxn];
bool vis[maxn];
queue<int>q;
void add(int x,int y,int z)
{
to[++tot]=y;
next[tot]=first[x];
first[x]=tot;
val[tot]=z;
}
void clear()
{
tot=0;
memset(dis,0x7f,sizeof(dis));
memset(vis,0,sizeof(vis));
memset(first,0,sizeof(first));
memset(to,0,sizeof(to));
memset(next,0,sizeof(next));
memset(val,0,sizeof(val));
memset(num,0,sizeof(num));
}
bool spfa(int s)
{
dis[s]=0;
q.push(s);
vis[s]=1;
while(!q.empty())
{
int u=q.front();
q.pop();
num[u]++;
if(num[u]>n) return 0;
vis[u]=0;
for(int i=first[u];i;i=next[i])
{
int v=to[i];
if(dis[v]>dis[u]+val[i])
{
dis[v]=dis[u]+val[i];
if(vis[u]) continue;
q.push(v);
vis[v]=1;
}
}
}
return 1;
}
int main()
{
cin>>t;
for(int i=1;i<=t;i++)
{
cin>>n>>m;
clear();
for(int j=1;j<=m;j++)
{
int x,y,z;
cin>>x>>y>>z;
if(z>=0)
{
add(x,y,z);
add(y,x,z);
}
else
{
add(x,y,z);
}
}
if(spfa(1))
{
cout<<"NO"<<endl;
}
else
{
cout<<"YES"<<endl;
}
}
}