这道题自己想了很久,一直不敢下手。
用并查集来做,题目中的每个stack 对应一个集合。
parent[] ,根节点存储树的子节点数量sum ,非根结点存储父节点。
up[i] ,存储结点i 到父节点的距离。路径压缩后,父节点即根节点,则输出结果为count[i]=sum-up[i]-1 ;
当把stack A 放到stack B 上面的时候,做集合的Union() 操作, 把集合B 并到集合A 中:
up[B]=-parent[A];parent[A]+=parent[B];parent[B]=A ;