#include<bits/stdc++.h>
using namespace std;
struct node{
int to, next, dis;
}k[1000005];
int head[100005], number, n, cnt[100005], dis[100005];
bool vis[100005];
void add(int x, int y, int z){
k[++number].to = y;
k[number].dis = z;
k[number].next = head[x];
head[x] = number;
}
void SPFA(int x){
memset(vis, false, sizeof vis);
memset(cnt, 0, sizeof cnt);
memset(dis, 0x3f, sizeof dis);
queue<int>q;
q.push(x);
dis[x] = 0; vis[x] = true;
while(!q.empty()){
int now = q.front();
vis[now] = false;
q.pop();
for(int i = head[now]; i; i = k[i].next){
int to = k[i].to, di = k[i].dis;
if(dis[now] + di < dis[to]){
dis[to] = dis[now] + di;
if(++cnt[to] >= n){
cout << "YES" << "\n";
return;
}
vis[to] = true, q.push(to);
}
}
}
cout << "NO" << "\n";
}
int main(){
int T, m, x, y, z;
cin >> T;
while(T--){
cin >> n >> m;
memset(head, -1, sizeof head);
number = 0;
for(int i = 1; i <= m; i++){
cin >> x >> y >> z;
add(x, y, z);
if(z >= 0) add(y, x, z);
}
SPFA(1);
}
}
嘤嘤嘤