求助
程序自动分析
竟然给我9个WA和1个TLE;
?┗|`O′|┛
#include<bits/stdc++.h>
using namespace std;
int father[100010];
struct node{
int a,b;
int h;
bool operator<(const node &k)const{
return h>k.h;
}
}f[1000010];
int Find(int x){
if(x==father[x]) return x;
else return father[x]=Find(father[x]);
}
void Merge(int x,int y){
father[Find(x)]=Find(y);
}
int main(){
int t;
cin>>t;
while(t--){
vector<int> s;
int n;bool flag;int x,y;
cin>>n;
for(int i=1;i<=n;i++){
cin>>f[i].a>>f[i].b>>flag;
s.push_back(f[i].a);
s.push_back(f[i].b);
}
sort(s.begin(),s.end());
s.erase(unique(s.begin(),s.end()),s.end());
for(int i=1;i<=n;i++){
f[i].a=lower_bound(s.begin(),s.end(),f[i].a)-s.begin();
f[i].b=lower_bound(s.begin(),s.end(),f[i].b)-s.begin();
}
for(int i=1;i<=s.end()-s.begin();i++)
father[i]=i;
sort(f+1,f+n+1);
for(int i=1;i<=n;i++){
if(f[i].h) Merge(f[i].a,f[i].b);
else if(f[i].a==f[i].b) flag=false;
}
if(flag)
printf("%s\n","YES");
else
printf("%s\n","NO");
}
return 0;
}