关于并查集按秩合并的一个玄学问题
查看原帖
关于并查集按秩合并的一个玄学问题
286448
Eason2009楼主2022/10/28 21:50

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了。

所以为什么按秩合并要写成这种形式?这种形式的按秩合并一定比我的第一种写法更快吗?

求教

2022/10/28 21:50
加载中...