题目:
题解:
离散化加上并查集
#include <bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int con;
unordered_map<long long ,long long>s;
int p[N];
struct node {
int x,y,e;
}q[N];
int find(int x)
{
if(p[x]!=x) p[x]=find(p[x]);
return p[x];
}
int get(long long x)
{
if(s.count(x)==0) s[x]=++con;
return s[x];
}
int main()
{
int t;
cin>>t;
while(t--)
{
s.clear();
con=0;
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
long long x,y,e;
cin>>x>>y>>e;
x=get(x),y=get(y);
q[i]={x,y,e};
}
int r=1;
for(int i=1;i<=2*n;i++) p[i]=i;
for(int i=1;i<=n;i++)
{
if(q[i].e)
{
int pa=find(q[i].x);
int pb=find(q[i].y);
p[pa]=pb;
}
}
for(int i=1;i<=n;i++)
{
if(!q[i].e)
{
if(find(q[i].x)==find(q[i].y))
{
r=0;
break;
}
}
}
if(r) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}