题目
我的代码在洛谷可以过,但在别的oj上有一个点内存超限,大佬们帮忙看一下有什么问题,应该是离散化那里出问题了QWQ
#include<bits/stdc++.h>
using namespace std;
int t,n,cnt,f[2400007],b[3000005];
struct hh{
int x,y,z;
}a[2400007];
bool cmp(hh a,hh b){
return a.z>b.z;
}
int find(int x){
if(f[x]==x)return x;
return f[x]=find(f[x]);
}
int main(){
cin>>t;
while(t--){
cin>>n;
cnt=0;
int v=0;
memset(b,0,sizeof b);
memset(a,0,sizeof a);
memset(f,0,sizeof f);
for(int i=1;i<=n;i++){
cin>>a[i].x>>a[i].y>>a[i].z;
b[++cnt]=a[i].x;
b[++cnt]=a[i].y;
}
sort(b+1,b+cnt+1);
int tot=unique(b+1,b+cnt+1)-b-1;
for(int i=1;i<=n;i++){
a[i].x=lower_bound(b+1,b+tot+1,a[i].x)-b;
a[i].y=lower_bound(b+1,b+tot+1,a[i].y)-b;
}
for(int i=1;i<=tot;i++)f[i]=i;
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++){
int fx=find(a[i].x),fy=find(a[i].y);
if(a[i].z==1){
f[fx]=fy;
}
else if(fx==fy){
v=1;
cout<<"NO"<<endl;
break;
}
}
if(v==0){
cout<<"YES"<<endl;
}
}
return 0;
}