QOJ.ac

QOJ

Límite de tiempo: 2 s Límite de memoria: 512 MB Puntuación total: 110

#12048. Lepeze

Estadísticas

小弗兰收到一个正多边形形状的木框作为礼物。由于多边形有 $n$ 个顶点,他还收到了 $\frac{n(n-3)}{2}$ 根木棍,每根木棍对应一条可能的对角线。多边形的顶点按逆时针方向标有从 $1$ 到 $n$ 的整数。起初,弗兰在框架内放置了 $n-3$ 根木棍,使得每根木棍连接框架的两个非相邻顶点,且没有任何两根木棍相交。换句话说,他完成了一个三角剖分。由于这对他来说不够有趣,他决定通过执行一个包含两个步骤的特定操作来摆弄这个配置:

  1. 移除一根木棍。
  2. 添加一根新木棍,使得我们得到一个新的三角剖分。

我们将该操作描述为一个无序对的有序对 $((a, b), (c, d))$,表示小弗兰移除了连接顶点 $a$ 和 $b$ 的木棍,并添加了连接顶点 $c$ 和 $d$ 的木棍。

弗兰喜欢折扇,因此在进行这些操作时,他有时会问自己:“将当前的三角剖分转换为顶点 $x$ 的‘扇形’三角剖分需要多少次操作,以及有多少种实现方式?”

既然他忙于操作并乐在其中,他请求你的帮助!

顶点 $x$ 的“扇形”三角剖分是指所有对角线都有一个公共端点,即顶点 $x$ 的三角剖分。

设所需的操作次数为 $m$。设 $f_1, f_2, \dots, f_m$ 是一个操作序列,当按给定顺序应用时,可以达到想要的三角剖分,从而代表了实现目标的一种方式。设 $s_1, s_2, \dots, s_m$ 是另一个这样的序列。如果存在一个索引 $i$ 使得 $f_i \neq s_i$,则两个序列是不同的。

由于这样的序列数量可能非常巨大,小弗兰只对它们对 $10^9 + 7$ 取模后的余数感兴趣。

输入格式

第一行包含整数 $n$ 和 $q$ ($4 \le n \le 2 \cdot 10^5, 1 \le q \le 2 \cdot 10^5$),分别表示顶点数和事件数。

接下来的 $n-3$ 行,每行包含整数 $x_i, y_i$ ($1 \le x_i, y_i \le n$),表示第 $i$ 根木棍连接的顶点标签。

接下来的 $q$ 行,每行包含一个整数 $t_i$ ($1 \le t_i \le 2$),表示事件类型。

如果 $t_i = 1$,后面跟着 $4$ 个整数 $a_i, b_i, c_i, d_i$ ($1 \le a_i, b_i, c_i, d_i \le n$),表示此时正在进行操作 $((a_i, b_i), (c_i, d_i))$。保证给定的操作是可以实现的。

如果 $t_i = 2$,后面跟着一个整数 $x_i$ ($1 \le x_i \le n$),表示小弗兰对相对于当前三角剖分的顶点 $x_i$ 的“扇形”三角剖分数据感兴趣。

输出格式

对于每个类型为 $2$ 的事件,按照它们在输入中出现的顺序,输出两个整数:达到目标三角剖分所需的最少操作次数,以及使用最少操作次数达到目标三角剖分的方法数。

子任务

子任务 分值 数据范围
1 12 $n \le 9, q \le 1000$
2 16 $x_i = 1, y_i = i + 2$ 对于所有 $i = 1, \dots, n-3$,且没有类型为 1 的事件。
3 30 $q = 1$
4 12 $n, q \le 1000$
5 40 无附加限制。

样例

样例输入 1

4 3
1 3
2 1
1 1 3 2 4
2 1

样例输出 1

0 1
1 1

样例输入 2

5 4
1 3
3 5
2 1
2 2
1 1 3 2 5
2 2

样例输出 2

1 1
2 1
1 1

样例输入 3

9 3
1 5
1 7
2 4
2 5
5 7
7 9
2 1
1 2 5 1 4
2 1

样例输出 3

4 12
3 6

说明

第一个样例的说明: 初始三角剖分已经是顶点 $1$ 的“扇形”三角剖分,所以小弗兰不需要进行任何操作,有一种实现方式。执行给定的操作后,现在只有一种方法可以将其恢复到之前的状态,即应用操作 $((2, 4), (1, 3))$。

第二个样例的说明: 第一个查询的唯一操作序列:$((3, 5), (1, 4))$。 第二个查询的唯一操作序列:$((1, 3), (2, 5)), ((3, 5), (2, 4))$。 第三个查询的唯一操作序列:$((3, 5), (2, 5))$。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.