#B. 辰辰的多叉堆

    Type: RemoteJudge 1000ms 125MiB

辰辰的多叉堆

You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.

题目背景

纵横交错二,盘根错节

题目描述

辰辰对多叉堆有自己独特的见解,多叉堆是一种树形数据结构,本题中我们只考虑小根堆,它满足除了根以外的结点,每个点的权值都不小于父亲的权值。除了叶结点,每个点有至少一个子结点。

初始时有 nn 个结点,编号分别为 0n10 \sim n - 1 ,每个结点都是一棵以自身为根的单点树。接下来按顺序有 qq 次操作,每次操作有以下两种:

  • 1 x y:选择不在同一棵树里的结点 xxyy,将 xx 所在树的根直接接在 yy 所在树的根之下,此时 xxyy 所在树将合并为同一棵树。
  • 2 x:选择结点 xx,设 xx 当前所在树的结点数为 sizesize。你需要计算将 0size10 \sim size - 1sizesize 个数分别填入 xx 所在树的结点中,能够产生多少种不同的多叉堆。两种堆不同当且仅当存在某个结点填入的值不同。由于答案可能很大,你只需要求出答案模 109+710^9+7 后的结果。

输入格式

第一行两个整数 n,qn, q,具体含义见题目描述。

接下来 qq 行每行可能是下面两种格式之一:

  • 1 x' y':你需要通过计算 x=(x+ans)modn,y=(y+ans)modnx=(x'+ans) \bmod n , y=(y'+ans) \bmod n 来得到真正的 xxyy,输入保证 xxyy 所在树不同。
  • 2 x':你需要通过计算 x=(x+ans)modnx=(x'+ans) \bmod n 来得到真正的 xx

其中 ansans 表示上一次 22 操作的输出结果 ,初始时 ans=0ans=0

输出格式

对于每次 22 操作输出一行一个整数表示答案。

5 6
1 1 0
1 2 0
2 1
1 3 1
1 2 0
2 4
2
8

提示

【输入输出样例 1 说明】

11 次操作时,将 11 所在树的根 11 接在 00 所在树的根 00 下。

22 次操作时,将 22 所在树的根 22 接在 00 所在树的根 00 下。

33 次操作时,11 所在树如图 11,在 0,1,20,1,2 中分别填入 [0,1,2][0,1,2][0,2,1][0,2,1] 可以产生 22 种不同的堆。

44 次操作时 x=(3+2)mod5=0x=(3+2) \bmod 5=0y=(1+2)mod5=3y=(1+2) \bmod 5=3,将 00 所在树的根 00 接在 33 所在树的根 33 下。

55 次操作 时,x=(2+2)mod5=4x=(2+2) \bmod 5=4y=(0+2)mod5=2y=(0+2) \bmod 5=2,将 44 所在树的根 44 接在 22 所在树的根 33 下。

66 次操作 时,x=(4+2)mod5=1x=(4+2) \bmod 5=111 所在树如图 22,在 040\sim 4 中分别填入 [1,2,3,0,4][1,2,3,0,4][1,3,2,0,4][1,3,2,0,4][1,2,4,0,3][1,2,4,0,3][1,4,2,0,3][1,4,2,0,3][1,3,4,0,2][1,3,4,0,2][1,4,3,0,2][1,4,3,0,2][2,4,3,0,1][2,4,3,0,1] 可以产生 88 种不同的堆。

【数据规模与约定】

对于 100%100\% 的数据,0x,y<n3×1050\le x',y' <n \le 3\times 10^51Q3×1051\le Q\le 3\times 10^5

对于不同测试点,我们约定

特殊性质 11:存在 1i<n1\le i<n ,前 ii 次操作均为 11 操作,之后全是 22 操作。

特殊性质 22:对于所有输入 xxyy 本身即是其所在树的根。

北辰OI CSP-S模拟测试(四)

Not Attended
Status
Done
Rule
OI
Problem
4
Start at
2023-10-1 8:00
End at
2023-10-1 12:00
Duration
4 hour(s)
Host
Partic.
0