#include<bits/stdc++.h>
const double eps = 1e-5; const int inf = 0x7f7f7f7f;const int mod = 80112002; const double PI = 3.1415926535; const int int_max = 2147483647; const int int_min = -2147483648; using namespace std; typedef pair<int, int> pii; typedef long long ll; typedef unsigned int ui; typedef unsigned long long ull; typedef long long LL;
#define endl '\n'
#define ll_max 92233720368547758072
#define scanf scanf_s
#define hh <<"\n"
#define kg <<" "
#define www ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
const int maxn = 1e5 + 5;
struct edge
{
int v, w;
};
int T,n, m, s, uu, vv, ww;
vector<edge> e[maxn];
int dist[maxn];
int cnt[maxn];
bool in_queue[maxn];
bool spfa(int s)
{
bool flag = 0;
memset(dist, 0x3f3f, sizeof(dist));
memset(in_queue, 0, sizeof(in_queue));
memset(cnt, 0, sizeof(cnt));
queue <int> q;
q.push(1);
dist[1] = 0;
in_queue[1] = 1;
cnt[1] = 1;
while (!q.empty()) {
int u = q.front();
q.pop();
in_queue[u] = false;
for (int i = 0; i < e[u].size(); i++) {
int v = e[u][i].v;
int w= e[u][i].w;
if (dist[v] > dist[u] + w) {
dist[v] = dist[u] + w;
if (!in_queue[v]) {
cnt[v]++;
q.push(v);
in_queue[v] = true;
if (cnt[v] >= n) {
flag = 1; return flag;
}
}
}
}
}
return flag;
}
int main() {
cin >> T;
while(T--)
{
cin >> n >> m;
for (int i =0; i < n; i++)
{
e[i].clear();
}
for (int i = 0; i < m; i++) {
cin >> uu >> vv >> ww;
e[uu].push_back(edge{vv,ww});
if (ww >= 0) {
e[vv].push_back(edge{uu,ww});
}
}
cout<<(spfa(1)?"YES\n":"NO\n");
}
return 0;
}