其他分享
首页 > 其他分享> > POJ-1988-Cube Stacking

POJ-1988-Cube Stacking

作者:互联网

题目传送门

一、题目大意

有\(n\)个箱子,初始时每个箱子单独为一列;

接下来有\(p\)行输入,\(M\), \(x\), \(y\) 或者 \(C\), \(x\);

对于\(M\),\(x\),\(y\):表示将\(x\)箱子所在的一列箱子搬到\(y\)所在的一列箱子上;

对于\(C\),\(x\):表示查询箱子\(x\)下面有多少个箱子;

二、解析

本题在并查集的基础上,要求输出当前节点的子节点数量。
其实可以转化为带权并查集的问题,求出当前节点的祖先的总子孙数量,减去当前节点到祖先的距离再减一即可。

\(Up[x]\)代表\(x\)到自己的祖先的距离(也就是上面有多少节点)

\(sums[x]\)代表以\(x\)为根节点的子孙数量(只对根节点有效,因为在合并时,非根节点的\(sums\)值将不再被更新)

\(s[x]\)代表\(x\)的祖先

三、实现代码


标签:箱子,Cube,Stacking,查集,sums,祖先,POJ,一列,节点
来源: https://www.cnblogs.com/littlehb/p/16128501.html