#P8265. [Ynoi Easy Round 2020] TEST_63
[Ynoi Easy Round 2020] TEST_63
题目描述
给定一棵包含 个点的由有根树构成的森林(初始没有边,每个顶点是一棵有根树的根),顶点由 到 的整数编号表示。 你需要维护森林的轻重链剖分结构,具体如下:
对每个顶点 ,记其孩子构成的集合为 ,对 若 不是根则记其父亲为 ;
一个顶点 的子树规模 定义为 $1+\sum\limits_{u\in\mathrm{children}(w)}\mathrm{size(u)}$;
一个顶点 如果不是叶子(即 ),则它的重孩子 被定义为 $\mathrm{arg}\max_{u\in\mathrm{children}(w)}size(u)\cdot n+\max(u,\mathrm{hc}(u),\mathrm{hc}(\mathrm{hc}(u)),\dots)$,即子树规模最大的孩子(若有多个孩子 的子树规模相同则取以 为根的子树中, 所在重链中最大的编号最大);
重链是一个由顶点构成的序列 ,满足条件:
- 是根或
对一棵树,每个顶点恰好属于一条重链。 重链的权值为 ,即序列中顶点编号的按位异或和。
需要依次进行 次操作,操作类型如下:
- 加边:给出两个顶点 ,令 成为 所在有根树的根(设顶点构成的序列 满足 ,且 为根, 是 所在有根树上的有向边,将这些边的方向反转为 即可令 成为根),然后加入 到 的有向边 ,保证操作前 在不同的有根树上;
- 删边:给出两个顶点 ,删除 间的有向边(可能为 或 ),保证这条边之前存在;
- 查询:给出一个整数 ,设当前共有 条重链,询问将当前存在的所有重链按权值从小到大排序后,第 小的权值。
输入格式
第 行有两个整数 n m
;
接下来 行,每行四个整数 o a b k
,若 则表示先加边 ,然后查询 ,若 则表示先删边 ,然后查询 。
输出格式
共 行,每行一个整数,依次为每次查询操作的结果。
5 10
1 4 2 5
1 1 4 2
1 2 5 3
0 4 2 3
1 4 3 4
1 1 5 3
0 1 5 4
0 5 2 4
0 1 4 1
1 5 2 3
1
5
2
7
7
6
7
2
1
7
提示
Idea:nzhtl1477,Solution:ccz181078,Code:ccz181078,Data:ccz181078
本题采用子任务评测。
共 个测试点,所有测试点满足 ,,,,,, 均为整数;
测试点可能具有以下性质:
-
性质1:操作使用以下策略随机生成,重复直到生成了 行的操作序列:
-
在 中等概率选取三个整数 ,若 在不同的有根树上,则生成一行
1 x y k
,否则若 不是根,等概率地生成一行0 x father(x) k
或0 father(x) x k
之一,否则不进行操作。 -
性质2:,且对 ,数据的第 行为
1 a i k
,其中 在 中的整数等概率选取; -
性质3:,且对 ,数据的第 行为
1 i b k
,其中 在 中的整数等概率选取; -
其它对 的限制。
每个测试点的性质如下:
第1个测试点,,满足性质1,共10分;
第2个测试点,,满足性质1,共10分;
第3个测试点,,满足性质1,共10分;
第4个测试点,满足性质2,共15分;
第5个测试点,满足性质3,共15分;
第6~10个测试点,满足性质1,共20分;
第11~31个测试点没有特殊限制,共20分。