RT,我一开始合并写的是:
void merge(int u,int v)
{
if(u==v) return;
if(dep[u]<dep[v]) swap(u,v);
s.push(make_pair(v,dep[v]));
fa[v]=u;
dep[u]+=dep[v];
return;
}
结果TLE 80。
后来看了一下题解,发现有点不一样,然后我就照着题解把合并部分改了一下,改成了:
void merge(int u,int v)
{
if(u==v) return;
if(dep[u]<dep[v]) swap(u,v);
s.push(make_pair(v,dep[v]==dep[u]));
fa[v]=u;
dep[u]+=dep[v]==dep[u];
return;
}
然后就AC了。
所以为什么按秩合并要写成这种形式?这种形式的按秩合并一定比我的第一种写法更快吗?
求教