#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ll;
#define fastio ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
vector<vector<ll>> edges;
ll parent[100100], nrank[100100];
ll color[100100];
ll findSet(ll v){
if(v==parent[v]){
return v;
}
parent[v] = findSet(parent[v]);
return parent[v];
}
void unionSet(ll u,ll v){
ll pu = findSet(u);
ll pv = findSet(v);
if(pu!=pv){
if(nrank[pu]>nrank[pv]){
ll temp = pv;
pv=pu;
pu=temp;
}
parent[pu]=pv;
if(nrank[pu]==nrank[pv]){
nrank[pv]++;
}
}
}
bool checkcycle(ll N){
for(ll i=0;i<N;i++){
color[i]=-1;
}
for(ll i=0;i<edges.size();i++){
ll u = edges[i][0];
ll v = edges[i][1];
u = findSet(u);
v = findSet(v);
if(u==v){
return true;
}
if(color[u]==-1 && color[v]==-1){
color[u]=0;
color[v]=1;
}else if (color[u]==-1 && color[v]!=-1){
color[u]=!color[v];
}else if(color[v]==-1 && color[u]!=-1){
color[v]=!color[u];
}else if(color[v]==color[u]){
return true;
}
}
return false;
}
int main() {
fastio
ll T;
cin>>T;
while(T--){
ll N,Q;
cin>>N>>Q;
for(ll i=0;i<N;i++){
edges.clear();
parent[i]=i;
nrank[i]=0;
}
while (Q--){
ll i,j,v;
cin>>i>>j>>v;
if(v){
edges.push_back({i,j});
}else{
unionSet(i,j);
}
}
if(checkcycle(N)){
cout<<"no"<<"\n";
}else{
cout<<"yes"<<"\n";
}
}
return 0;
}
please someone help me to get AC