#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
const int MAXN = 1e5+7;
int T;
int n,m;
int u,v,w;
struct node{
int v,w;
};
vector<node > e[MAXN];
queue<int > q;
int cnt[MAXN],dis[MAXN];
bool vis[MAXN];
void add(int u,int v,int w){
e[u].push_back((node){v,w});
}
void init(){
memset(dis,0x3f,sizeof(dis));
memset(vis,false,sizeof(vis));
memset(cnt,0,sizeof(cnt));
scanf("%d%d",&n,&m);
for(int i = 1;i <= n;i++){
e[i].clear();
}
for(int i = 1;i <= n;i++){
scanf("%d%d%d",&u,&v,&w);
w >= 0?add(u,v,w),add(v,u,w):add(u,v,w);
}
}
bool spfa(){
dis[1] = 0,vis[1] = true;
q.push(1);
while(!q.empty()){
int u = q.front();
q.pop(),vis[u] = 0;
for(long long unsigned i = 0;i < e[u].size();i++){
node ed = e[u][i];
int v = ed.v, w = ed.w;
if(dis[v] > dis[u] + w){
dis[v] = dis[u] + w;
cnt [v] = cnt[u] +1;
if(cnt[v] >= n) return false;
if(!vis[v]) q.push(v),vis[v] = true;
}
}
}
return true;
}
int main(){
freopen("P3385_1.in","r",stdin);
scanf("%d",&T);
while(T--){
init();
spfa()?printf("NO\n"):printf("YES\n");
}
fclose(stdin);
return 0;
}