可以离散化一下,也可以用map存;
#include<bits/stdc++.h>
using namespace std;
#define close_stdin ios::sync_with_stdio(false)
int t;
unordered_map<int,int> mp;
vector<pair<int,int> > va;
int find(int x)
{
return mp[x]==x? x:mp[x]=find(mp[x]);
}
int merge(int x,int y)
{
mp[find(x)]=find(y);
}
int main()
{
close_stdin;
cin>>t;
int n;
while(t--)
{
int cnt=0;
cin>>n;
int j=0;
mp.clear();va.clear();
for(int i=1;i<=n;i++)
{
int x,y,d;
cin>>x>>y>>d;
if(!mp[x]) mp[x]=x;
if(!mp[y]) mp[y]=y;
if(d==1)
{
merge(x,y);
}
else{
va.emplace_back(make_pair(x,y));
}
}
for(auto it:va)//va里存的是不相等的两个,如果相等,则矛盾
if(find(it.first)==find(it.second)) {cnt++;break;}
if(cnt) cout<<"NO"<<endl;
else cout<<"YES"<<endl;
}
}

京公网安备 11010502036488号