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