P3348 [ZJOI2016]大森林(c++题解)

题目描述
小 Y 家里有一个大森林,里面有 nn 棵树,编号从 11 到 nn。一开始这些树都只是树苗,只有一个节点,标号为 11。这些树都有一个特殊的节点,我们称之为生长节点,这些节点有生长出子节点的能力。

小 Y 掌握了一种魔法,能让第 ll 棵树到第 rr 棵树的生长节点长出一个子节点。同时她还能修改第 ll 棵树到第 rr 棵树的生长节点。她告诉了你她使用魔法的记录,你能不能管理她家的森林,并且回答她的询问呢?
输入格式
第一行包含 22 个正整数 n,mn,m,共有 nn 棵树和 mm 个操作。

接下来 mm 行,每行包含若干非负整数表示一个操作,操作格式为:

0 l r 表示将第 ll 棵树到第 rr 棵树的生长节点下面长出一个子节点,子节点的标号为上一个 00 号操作叶子标号加 11(例如,第一个 00 号操作产生的子节点标号为 22), ll 到 rr 之间的树长出的节点标号都相同。保证 1\leq l\leq r\leq n1≤l≤r≤n 。

1 l r x 表示将第 ll 棵树到第 rr 棵树的生长节点改到标号为 xx 的节点。对于 ii (l\leq i\leq rl≤i≤r) 这棵树,如果标号 xx 的点不在其中,那么这个操作对该树不产生影响。保证 1\leq l\leq r\leq n1≤l≤r≤n,xx 不超过当前所有树中节点最大的标号。

2 x u v 询问第 xx 棵树中节点 uu 到节点 vv 点的距离,也就是在第 xx 棵树中从节点 uu 和节点 vv 的最短路上边的数量。保证 1\leq x\leq n1≤x≤n,这棵树中节点 uu 和节点 vv 存在。
输出格式

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值