方块栈问题

一 问题描述

贝西正在玩方块游戏,方块编号为 1 到 N,开始时每个方块都相当于一个栈。贝西执行 P 个操作,操作类型有两种:M X Y,将包含 X 的栈整体移动到包含 Y 的栈顶部;C X,查询 X 方块下的方块数量。请统计贝西每个操作的结果。

二 输入和输出

1 输入

第 1 行为单个整数 P,表示操作的数量。第 2 到 P+1 行,每一行都描述一个操作。

2 输出

对每个 C 操作,都输出统计结果。

三 输入和输出样例

1 输入样例

6

M 1 6

C 1

M 2 4

M 2 6

C 3

C 4

2 输出样例

1

0

2

四 分析

本问题包括移动和计数两种操作,本问题可以借助并查集实现,在集合查找和合并时,更新树根下方的方块数量即可。使用并查集可以快速、高效地解决该问题。

五 算法设计

1 初始化

初始化每个方块的集合号都为其自身。

2 查询或者合并。

C X:查询 X 的集合号,并输出 X 方块下的方块数量。

d[i]:第 i 个方块下的方块数量。

查询 X 的祖宗,在返回过程中将经过路径上的节点的集合号统一为祖宗的集合号,将当前节点的 d 值加上其父节点的 d 值。

M X Y:合并 X、Y 集合号。

cnt[i]:第 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值