#include <bits/stdc++.h>
#include <vector>
using namespace std;
struct road
{
int to;
int length;
};
vector<road> roads[2000];
int n,m;
int fresh()
{
for(int i=0; i<=2000; i++)
{
roads[i].clear();
}
}
int init()
{
cin>>n>>m;
fresh();
for(int i=0; i<m; i++)
{
int i1,i2,l;
cin>>i1>>i2>>l;
i1--;
i2--;
if(l>=0)
{
roads[i1].push_back(road({i2,l}));
roads[i2].push_back(road({i1,l}));
}
else
{
roads[i1].push_back(road({i2,l}));
}
}
}
int check()
{
int q[100000]= {0};
int e=0;
int cnt=0;
int dis[2000]= {0};
int times[2000]= {0};
for(int i=0; i<2000; i++)
{
dis[i]=i?INT_MAX:0;
}
q[e++]=0;
while(cnt!=e)
{
int j=q[cnt++];
vector<road>::iterator it;
for(it=roads[j].begin(); it!=roads[j].end(); it++)
{
road r=*it;
int da=r.length+dis[j];
if(da<dis[r.to])
{
dis[r.to]=da;
q[e++]=r.to;
times[r.to]++;
if(times[r.to]==n)
{
cout<<"YES\n";
return 0;
}
}
}
}
cout<<"NO\n";
return 0;
}
int main()
{
int T;
cin>>T;
for(int i=0; i<T; i++)
{
init();
check();
}
}