为什么将37行的for放到36行的sort函数,第二个测试集会MLE
#include<bits/stdc++.h>
using namespace std;
int t,n,x,y,k;
struct node{
int a;
int b;
int e;
bool operator<(const node& one){
return e>one.e;
}
}a[100005];
int f[100005];
int b[100005<<1];
int find(int x){
return f[x]==x?x:(f[x]=find(f[x]));
}
void check(){
memset(a,0,sizeof(a));
memset(f,0,sizeof(f));
memset(b,0,sizeof(b));
cin>>n;
int num=0;
for(int i=1;i<=n;i++){
cin>>a[i].a>>a[i].b>>a[i].e;
b[++num]=a[i].a;
b[++num]=a[i].b;
}
sort(b+1,b+num+1);
int index=unique(b+1,b+num+1) - b;
for(int i=1;i<=n;i++){
a[i].a=lower_bound(b+1,b+index+1,a[i].a)-b;
a[i].b=lower_bound(b+1,b+index+1,a[i].b)-b;
}
sort(a+1,a+n+1);
for(int i =1;i<=index;i++){
f[i]=i;
}
for(int i =1;i<=n;i++){
int pa=find(a[i].a);
int pb=find(a[i].b);
if(a[i].e==1){
if(pa!=pb){
f[pb]=pa;
}
}else{
if(pa==pb){
cout<<"NO"<<endl;
return;
}
}
}
cout<<"YES"<<endl;
}
int main(){
cin>>t;
while(t--){
check();
}
}