#5767. 「CEOI2026」观鸟者
标签: 传统 | 时间限制: 10000 ms | 内存限制: 512 MiB |
题目描述
题目译自 CEOI 2026 Day1 T1「Birdwatchers」
San Serriffe 的观鸟者协会拥有一个奇特、臃肿且不断变动的内部组织结构。协会由 n 个分会组成,每位协会成员都恰好属于一个分会。分会按 1 到 n 进行编号,第 i 个分会有 mi 名成员。因此,协会共有 M=m1+m2+⋯+mn 名成员。
每个分会由其一名成员领导,在此角色中被称为该分会的干事。干事的编号与分会相同,因此对于每个 i=1,…,n,干事 i 是负责第 i 个分会的人。
此外,干事之间通过导师系统建立起层级结构:除一人外,每个干事都有一个导师,该导师是另一个分会的干事。唯一没有导师的干事是协会会长。若干事 a 是干事 b 的导师,我们也可以说干事 b 是干事 a 的门徒。没有任何干事会直接或间接成为自己的导师;因此,通过追溯从某个干事到其导师、导师的导师等序列,最终总是会到达会长。
我们定义一名干事的影响力为其所属分会的成员数量与其所有门徒(如果有的话)的影响力之和。显而易见,影响力最大的干事是会长,其影响力始终等于 M。若一名干事的影响力满足 ≥M/2,则称其为资深干事。
协会章程规定,在所有资深干事中,影响力最小的那一位将担任协会的财务主管。
干事(会长除外)有时可能会改变其归属,从而成为与之前不同的另一位导师的门徒(前提是其新导师不是其门徒或门徒的门徒等)。因此,某些干事的影响力可能会发生变化,财务主管的职责也可能落到与之前不同的干事身上。
编写一个程序,读取协会的初始状态及一系列归属变更。你的程序必须输出初始状态下以及每次归属变更后的财务主管编号。
输入格式
第一行包含两个整数 n 和 q,用空格分隔,分别表示分会的数量和归属变更的次数。
接下来 n 行描述协会的初始状态。其中第 i 行包含两个整数 si 和 mi,用空格分隔;si 是干事 i(即负责第 i 个分会的干事)的导师,而 mi 是第 i 个分会的成员数量。若 si=0,则表示干事 i 是协会会长,因而没有导师。
其余 q 行描述归属的变更。其中第 j 行包含两个整数 x^j 和 z^j,用空格分隔。这两个整数的含义如下:设 tj(对于 j=0,…,q)表示前 j 次归属变更后的财务主管(因此 t0 为第一次归属变更之前的初始财务主管)。则第 j 次归属变更代表干事 zj 成为干事 xj 的新导师,其中 xj=1+((tj−1+x^j)modn) 且 zj=1+((tj−1+z^j)modn)。这种对 xj 和 zj 值的表达方式旨在强制你的程序按照变更出现的顺序依次处理它们。
输入数据中的归属变更总是有效的,即 zj 不会等于 xj,且 zj 也不会是 xj 的门徒、门徒的门徒等。但是,在第 j 次变更之前 zj 可能已经是 xj 的导师(在这种情况下,实际上没有任何变化)。
请注意,若你的程序在某个时刻计算出了错误的答案 tj,则后续的输入 x^j+1,z^j+1 等也将被错误地解码,并且可能因为解码后的输入无效(例如错误地得到了一个属于 xj+1 门徒的 zj+1)而导致程序以 RTE(运行错误)而非 WA(答案错误)判定终止。
输出格式
输出 t0,t1,…,tq,每行包含一个整数,其中 tj 表示前 j 次归属变更后的财务主管编号。显然,每个 tj 必须是范围 1≤tj≤n 内的整数。
样例
输入
7 2
0 1
1 3
1 3
2 3
2 1
5 2
5 1
3 7
2 7
输出
2
2
3
起初,干事 2 是财务主管(因此 t0=2)。在第一次归属变更中,我们读取 x^1=3 和 z^1=7,并计算出 x1=1+((2+3)mod7)=6 且 z1=1+((2+7)mod7)=3;因此,干事 3 成为干事 6 的新导师;干事 2 仍为财务主管(因此 t1=2)。在第二次归属变更中,我们读取 x^2=2 和 z^2=7,并计算出 x2=1+((2+2)mod7)=5 且 z2=1+((2+7)mod7)=3;因此,干事 3 成为干事 5 的新导师,并同时也成为了新的财务主管(因此 t2=3)。
数据范围与提示
对于所有输入数据,满足:
- 1≤n≤1000000
- 1≤q≤30000
- 对于每个 i=1,…,n,满足 1≤mi
- m1+m2+⋯+mn≤109
- 对于每个 j=1,…,q,满足 1≤x^j≤n 且 1≤z^j≤n
详细子任务附加限制及分值如下表所示。
| 子任务 |
分值 |
附加限制 |
| 1 |
15 |
n≤100 |
| 2 |
10 |
n≤1000 |
| 3 |
50 |
n≤300000 |
| 4 |
25 |
无附加限制 |