Home => ProblemSet => 【模板】Prüfer(Prufer)序列
Problem2333--【模板】Prüfer(Prufer)序列

2333: 【模板】Prüfer(Prufer)序列

Time Limit: 2 Sec  Memory Limit: 512 MB  Submit: 0  Solved: 3
[ Submit ] [ Status ] [ Creator: ][ 参考程序 ]

Description

Prüfer 序列又写作 Prufer 序列。

请实现 Prüfer 序列和无根树的相互转化。
为方便你实现代码,尽管是无根树,我们在读入时仍将 n 设为其根。
对于一棵无根树,设 f1…n−1 为其父亲序列(fi 表示 i 在 n 为根时的父亲),设 p1…n−2 为其 Prüfer 序列
另外,对于一个长度为 m 的序列 a1…m,我们设其权值为 xor(i=1 to m) i×ai

Input

第一行两个整数 n,m,表示树的点数和转化类型。
若 m=1,第二行一行 n−1 个整数,表示父亲序列。
若 m=2,第二行一行 n−2 个整数,表示 Prüfer 序列。

Output

若 m=1,一行一个整数,表示给出的父亲序列对应的 Prüfer 序列的权值。
若 m=2,一行一个整数,表示给出的 Prüfer 序列对应的父亲序列的权值。

Sample Input Copy

6 1
3 6 4 6 1

Sample Output Copy

29

HINT

样例二:
输入:
6 2
4 6 5 2
输出:
4




【样例 1 解释】
p={6 1 3 4}。
【样例 2 解释】
f={4 6 6 5 2}。

【数据范围】
测试点编号 2≤n≤ m=
1 103 1
2 105 1
3 105 1
4 5×106 1
5 5×106 1
6 103 2
7 105 2
8 105 2
9 5×106 2
10 5×106 2


Source/Category