求助7分wa mle
查看原帖
求助7分wa mle
573334
yzkadbq_qwq楼主2023/8/26 09:43
#include<bits/stdc++.h>
using namespace std;
struct node{
	int ls,rs,val,s;
} t[100001];
int fa[100001],n,m,rt[100001]; 
void update(int id){
	t[id].s=t[t[id].rs].s+1;
}
int merge(int x,int y){
	if(!x or !y){
		return x+y;
	}
	if(t[x].val>t[y].val){
		swap(x,y);
	}
	t[x].rs=merge(t[x].rs,y);
	if(t[t[x].ls].s<t[t[x].rs].s){
		swap(t[x].ls,t[x].rs);
	}
	update(x);
	return x;
}
int find(int k){
	if(fa[k]==k) return k;
	else return fa[k]=find(fa[k]);
}
void unionset(int x,int y){
	fa[find(x)]=y;
	return;
} 
int del[100001];
int main(){
	cin>>n>>m;
	t[0].s=-1;
	for(int i=1;i<=n;i++){
		int tmp;
		cin>>t[i].val;
		t[i]={0,0,t[i].val,0};
		fa[i]=i;
		rt[i]=i;
	}
	
	while(m--){
		int op,x,y;
		cin>>op>>x;
		if(op==1){
			cin>>y;
			int p=find(x),q=find(y);
			if(p != q){
				fa[p]=y;
				rt[p] = merge(rt[p], rt[q]);
			}
			
		}else{
			 int p=find(x);
			 if(!del[x]) cout<<t[rt[p]].val<<endl;
			 else cout<<"-1\n";
			 del[x]=1;
			 merge(t[x].ls,t[x].rs);
		}
	}
	return 0;
}
2023/8/26 09:43
加载中...