#include<bits/stdc++.h>
using namespace std;
const int N = 2005;
struct edge
{
int to,cost;
};
int T,n,m;
int dis[N],vis[N],cnt[N];
vector <edge> p[N];
queue <int> q;
int spfa()
{
//for(int i = 1;i <= n;i ++)dis[i] = 2147483647;
dis[1] = 0;
q.push(1);
vis[1] = 1;
while(!q.empty())
{
int u = q.front();
q.pop();
vis[u] = 0;
for(int i = 0;i < p[u].size();i ++)
{
int v = p[u][i].to,l = p[u][i].cost;
if(dis[v] > dis[u] + l)
{
dis[v] = dis[u] + l;
cnt[v] = cnt[u] + 1;
if(cnt[v] >= n)return 1;
if(!vis[v])
{
vis[v] = 1;
q.push(v);
}
}
}
}
return 0;
}
int main()
{
cin>>T;
for(int l = 1;l <= T;l ++)
{
cin>>n>>m;
for(int i = 1;i <= m;i ++)
{
int a,b,c;
cin>>a>>b>>c;
p[a].push_back(edge{b,c});
if(c >= 0)p[b].push_back(edge{a,c});
}
if(spfa())cout<<"YES"<<'\n';
else cout<<"NO"<<'\n';
}
return 0;
}
0pts代码555~