rt
#include<bits/stdc++.h>
using std::queue;
using std::max;
using std::min;
using std::cin;
using std::cout;
# define N 500005
# define INF 0x3f3f3f3f
int head[N],ver[N],edge[N],Next[N];
int n,m,w,tot;
bool vis[N];
int dist[N],cnt[N];
queue<int>Q;
void ADD(int x,int y,int z) {
ver[++tot]=y;
edge[tot]=z;
Next[tot]=head[x];
head[x]=tot;
}
bool SPFA() {
memset(vis,0,sizeof(vis));
memset(dist,0,sizeof(dist));
memset(cnt,0,sizeof(cnt));
for(int i=1; i<=n; i++)
Q.push(i),vis[i]=true;
while(Q.size()) {
int x=Q.front();
Q.pop();
vis[x]=0;
for(int i=head[x]; ~i; i=Next[i]) {
int y=ver[i],z=edge[i];
if(dist[y]>dist[x]+z) {
dist[y]=dist[x]+z;
cnt[y]=cnt[x]+1;
if(cnt[y]>=n)return true;
if(!vis[y])
Q.push(y),vis[y]=true;
}
}
}
return false;
}
int main() {
int x,y,z,T;
cin>>T;
while(T--) {
memset(head,-1,sizeof(head));
tot=-1;
cin>>n>>m;
for(int i=1; i<=m; i++) {
int u,v,w;
cin>>u>>v>>w;
if(w>=0) ADD(u,v,w),ADD(v,u,w);
else ADD(u,v,w);
}
printf("%s\n",SPFA()?"YES":"NO");
}
return 0;
}