#P6086. 【模板】Prufer 序列(Prufer Sequence)
0
【模板】Prufer 序列(Prufer Sequence)
【模板】Prufer 序列(Prufer Sequence)
题目描述
Prüfer 序列又写作 Prufer 序列。
请实现 Prüfer 序列和无根树的相互转化。
为方便你实现代码,尽管是无根树,我们在读入时仍将 设为其根。
对于一棵无根树,设 为其父亲序列( 表示 在 为根时的父亲),设 为其 Prüfer 序列。
另外,对于一个长度为 的序列 ,我们设其权值为 。
输入格式
第一行两个整数 ,表示树的点数和转化类型。
若 ,第二行一行 个整数,表示父亲序列。
若 ,第二行一行 个整数,表示 Prüfer 序列。
输出格式
若 ,一行一个整数,表示给出的父亲序列对应的 Prüfer 序列的权值。
若 ,一行一个整数,表示给出的 Prüfer 序列对应的父亲序列的权值。
样例输入 #1
6 1
3 6 4 6 1
样例输出 #1
29
样例输入 #2
6 2
4 6 5 2
样例输出 #2
4
数据范围
【样例 1 解释】
。
【样例 2 解释】
。
【数据范围】
| 测试点编号 | ||
|---|---|---|
知识点与难度
本题涉及的知识点从属于 NOI,难度(CF Rating):2100。
测试点分布
| Subtask | 分值 | 测试点编号 | 说明 |
|---|---|---|---|
| 0 | 10 | 1~2 | 样例 |
| 1 | 20 | 3~8 | 小规模 n≤1000 (m=1与m=2各半) / 特殊: n=2(Prüfer序列为空,权值为0) / 特殊: 菊花树与单链 |
| 2 | 40 | 9~21 | 中等与较大规模 n≤100000 (m=1与m=2全覆盖,含指针回跳Hack) |
| 3 | 30 | 22~25 | 满规模 n=2×10^6~5×10^6 (m=1与m=2) 线性O(n)算法与64位异或权值压力测试 |
出处:原题链接