int DSU(int x,int y)
{
if(!x||!y)
return x|y;
if(tree[x].siz>tree[y].siz)
swap(x,y);
int rx,ry;
split(x,tree[y].val,rx,ry);
tree[y].lc=DSU(tree[y].lc,rx);
tree[y].rc=DSU(tree[y].rc,ry);
return y;
}
void DSU(int x,int &y)
{
if(!x)
return;
DSU(tree[x].lc,y);
DSU(tree[x].rc,y);
tree[x].lc=tree[x].rc=0;
int rx,ry;
split(y,tree[x].val,rx,ry);
y=merge(merge(rx,x),ry);
}
目前蒟蒻看到过这两种写法,哪种更优秀?抑或是说我写的都是假的DSU?