求助orz WA
查看原帖
求助orz WA
215953
wzch楼主2022/5/22 20:01
#include<bits/stdc++.h>
using namespace std;
struct NODE
{
	int son[2],val,dis,rt;
	bool exist;
}node[100010];
int  merge(int x,int y)
{
	if(x*y==0)return x+y;
	if(node[x].val>node[y].val||(node[x].val==node[y].val&&x>y))swap(x,y);
	node[x].son[1]=merge(y,node[x].son[1]);
	if(node[node[x].son[0]].dis<node[node[x].son[1]].dis)swap(node[x].son[0],node[x].son[1]);
	node[x].dis=node[node[x].son[1]].dis+1;
	return x;
}
int _find(int x){if(node[x].rt!=x)node[x].rt=_find(node[x].rt);return node[x].rt;}
int main()
{
	node[0].dis=-1;
	int n,m;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){scanf("%d",&node[i].val);node[i].dis=0;node[i].exist=1;node[i].rt=i;}
	int op,x,y;
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d",&op,&x);
		if(op==1)
		{
			scanf("%d",&y);
			if(!(node[x].exist||node[x].exist))continue;
			x=_find(x);y=_find(y);
			if(x==y)continue;
			node[x].rt=node[y].rt=merge(x,y);
		}
		else
		{
			if(!node[x].exist){printf("-1\n");continue;}
			x=_find(x);
			printf("%d\n",node[x].val);
			node[x].exist=0;
			int t1=node[x].son[0],t2=node[x].son[1];
			node[t1].rt=node[t2].rt=node[x].rt=merge(t1,t2);
			node[x].son[0]=node[x].son[1]=node[x].dis=0;
		}
	}
}
```cpp
2022/5/22 20:01
加载中...