题目link
#include<bits/stdc++.h>
#define FL(i,a,b) for(int i=(a);i<=(b);i++)
#define FR(i,a,b) for(int i=(a);i>=(b);i--)
#define int long long
using namespace std;
const int MAXN = 2e4 + 10;
const int MAXM = 3e4 + 10;
const int INF = 0x3f3f3f3f;
struct node{
int nxt,v,w;
}e[MAXN];
int head[MAXN],cnt=0,num[MAXN],dis[MAXN],n,m;
bool vis[MAXN];
void Init(){
cnt=0;
memset(head,-1,sizeof(head));
memset(num,0,sizeof(num));
memset(vis,false,sizeof(vis));
fill(dis+1,dis+n+1,INF);
}
void add(int u,int v,int w){
e[++cnt].v=v;
e[cnt].nxt=head[u];
e[cnt].w=w;
head[u]=cnt;
}
bool spfa(){
queue<int> q;
q.push(1);
dis[1]=0;
vis[1]=1;
while(!q.empty()){
int u=q.front();
vis[u]=0;
q.pop();
for(int i=head[u];~i;i=e[i].nxt){
int v=e[i].v,w=e[i].w;
if(dis[u]+w<dis[v]){
dis[v]=dis[u]+w;
if(!vis[v]){
num[v]++;
if(num[v]>=n){
return 1;
}
vis[v]=1;
q.push(v);
}
}
}
}
return 0;
}
signed main(){
int T;
scanf("%lld",&T);
while(T--){
Init();
scanf("%lld%lld",&n,&m);
FL(i,1,m){
int u,v,w;
scanf("%lld%lld%lld",&u,&v,&w);
if(w>=0){
add(u,v,w);
add(v,u,w);
}
if(w<0){
add(u,v,w);
}
}
if(spfa()){
printf("YES\n");
}
else{
printf("NO\n");
}
}
}