Rt
#include<bits/stdc++.h>
#define int long long
#define N 20010
using namespace std;
const int inf = 0x7fffffff;
int n, m, s, id = 0, h[N], d[N], pd[N], cnt[N];
struct edge {
int next, to, v;
}a[N];
void add(int from, int to, int v) {
id++;
a[id].next = h[from];
a[id].to = to;
a[id].v = v;
h[from] = id;
}
void init() {
memset(h, -1, sizeof(h));
memset(pd, 0, sizeof(pd));
memset(cnt, 0, sizeof(cnt));
id = 0;
}
void solve() {
queue<int> q;
init();
s = 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);
}
for(int i = 1; i <= n; i++) {
d[i] = inf;
pd[i] = 0;
}
q.push(s);
d[s] = 0;
pd[s] = 1;
while(!q.empty()) {
int x = q.front();
q.pop(), pd[x] = 0;
for(int i = h[x]; i; i = a[i].next) {
int k = a[i].to;
if(d[k] > d[x] + a[i].v) {
d[k] = d[x] + a[i].v;
if(pd[k] == 0) {
if(++cnt[k] >= n) {
cout << "YES" << endl;
return;
}
q.push(k);
pd[k] = 1;
}
}
}
}
cout << "NO" << endl;
}
signed main() {
// freopen("test.txt", "w", stdout);
int t;
cin >> t;
while(t--)
solve();
return 0;
}