#include<bits/stdc++.h>
using namespace std;
int T,n,m;
int dis[10010],q[10010];
bool vis[10010];
struct Graph{
int to,w;
};
vector<Graph>Edge[10010];
bool SPFA(){
queue<int>s;
s.push(1);
dis[1]=0;
q[1]++;
while(!s.empty()){
int x=s.front();s.pop();
vis[x]=0;
for(int i=0;i<Edge[x].size();i++){
if(dis[x]+Edge[x][i].w<dis[Edge[x][i].to]){
dis[Edge[x][i].to]=dis[x]+Edge[x][i].w;
if(!vis[Edge[x][i].to]){
vis[Edge[x][i].to]=1;
s.push(Edge[x][i].to);
if(++q[Edge[x][i].to]>=n) return false;
}
}
}
}
return true;
}
int main(){
cin>>T;
while(T--){
for(int i=1;i<=n;i++){
dis[i]=INT_MAX;
vis[i]=0;q[i]=0;
Edge[i-1].clear();
}
cin>>n>>m;
int flag=1;
for(int i=1,u,v,w;i<=m;i++){
cin>>u>>v>>w;
Edge[u].push_back((Graph){v,w});
if(w>=0) Edge[v].push_back((Graph){u,w});
}
flag=SPFA();
if(flag==1) cout<<"NO\n";
else cout<<"YES\n";
}
return 0;
}
My Record