感觉这道题有些题解是假的啊
查看原帖
感觉这道题有些题解是假的啊
73032
日居月诸lucejx楼主2020/11/25 16:22

由于按秩合并并不会影响正确性而只影响效率,所以有些题解处理地不太恰当,其实是错的

我就举个例子,比如第三篇pengym的题解

有这样一句话

merge(root[i-1],root[i],1,n,fa[posx],fa[posy]);
if(dep[posx]==dep[posy])update(root[i],1,n,fa[posy]);

而他的update函数是这样实现的

void update(int rt,int l,int r,int pos)
{
    if(l==r){dep[rt]++;return ;}
    if(pos<=Mid)update(lson,pos);
    else update(rson,pos);
}

没有新建节点。他说是不需用到中间版本的信息,其实关键不在这里。这个写法不能保证在merge之后到fa[posy]的路径已经新建,那么这样改dep可能会影响到原来的版本,即修改了原版本,这样其实是很有问题的。

应该是这样的把

2020/11/25 16:22
加载中...