子树中的众数
题目描述
给定一棵有 N 个顶点的有根树,顶点编号为 1 到 N。顶点 1 是根,顶点 i 的父亲是顶点 pi,并且 pi<i。
每个顶点都有一种颜色:顶点 i 的颜色为 ci,其中 1≤ci≤N。
对于每个 v=1,2,…,N,完成下面的问题:
令 fi 表示以顶点 v 为根的子树中,颜色为 i 的顶点个数。求:
- 序列 (f1,f2,…,fN) 中的最大值 m;
- 满足 fi=m 的、不超过 N 的正整数 i 的个数 k。
本题采用特殊的输入输出格式。
标准输入给出整数 N,以及整数 seed,M,F、q2,q3,…,qM 和 d1,d2,…,dM。按以下过程还原 p2,p3,…,pN 和 c1,c2,…,cN。
首先令 state=seed。依次处理 i=2,3,…,N:
- 若 i≤M,令 pi=qi;
- 否则,令 pi=(statemod(i−1))+1,然后令
$\mathrm{state}=(\mathrm{state}\times1103515245+12345)\bmod 2^{31}$。
接着依次处理 i=1,2,…,N:
- 若 i≤M,令 ci=di;
- 否则,令 ci=(statemodF)+1,然后令
$\mathrm{state}=(\mathrm{state}\times1103515245+12345)\bmod 2^{31}$。
这里 231=2147483648。state 是变量,计算它时需要使用 64 位整数类型。
令 mi,ki 分别表示对 v=i 求得的 m,k。输出
$$\left(\sum_{i=1}^{N}(m_i\mathbin\oplus i)\times(k_i\mathbin\oplus i)\right)\bmod998244353,$$
其中 ⊕ 表示按位异或。计算时请注意溢出。
输入格式
第一行输入四个整数:
NseedMF
第二行输入 M−1 个整数:
q2q3⋯qM
第三行输入 M 个整数:
d1d2⋯dM
输出格式
输出一个整数,表示
$$\left(\sum_{i=1}^{N}(m_i\mathbin\oplus i)\times(k_i\mathbin\oplus i)\right)\bmod998244353.$$
样例输入 1
4 454 4 2
1 2 2
1 2 2 3
样例输出 1
29
样例解释 1
对于 i=1,有 m1=2,k1=1,对应贡献为 0。
对于 i=2,有 m2=2,k2=1,对应贡献为 0。
对于 i=3,有 m3=1,k3=1,对应贡献为 4。
对于 i=4,有 m4=1,k4=1,对应贡献为 25。
因此输出 0+0+4+25=29。
样例输入 2
6 123 2 2
1
1 2
样例输出 2
101
样例解释 2
本样例还原出的序列为
(p2,p3,…,p6)=(1,2,1,2,3),
(c1,c2,…,c6)=(1,2,2,1,2,1).
样例输入 3
15 1 4 5
1 2 3
5 3 1 3
样例输出 3
1199
样例解释 3
本样例还原出的序列为
$$(p_2,p_3,\ldots,p_{15})=(1,2,3,2,1,4,7,6,5,10,1,10,2,8),$$$$(c_1,c_2,\ldots,c_{15})=(5,3,1,3,4,2,2,2,4,2,2,5,3,5,3).$$
数据范围
- 2≤N≤2.5×106;
- 1≤pi<i;
- 1≤ci≤N;
- 1≤seed<231;
- 2≤M≤min(N,105);
- 1≤F≤N;
- 1≤qi<i;
- 1≤di≤N;
- 所有输入值均为整数。
根顶点的深度定义为 0。
| 子任务编号 |
分值 |
特殊限制 |
| 1 |
30 |
还原出的树中,每个顶点的深度均不超过 2 |
| 2 |
还原出的颜色序列中,不同颜色的个数不超过 8 |
| 3 |
40 |
无特殊限制 |