QOJ.ac

QOJ

Time Limit: 2.0 s Memory Limit: 512 MB Total points: 100

#12536. 仙人掌构造

Statistics

我们考虑以下构造图的方法。选择颜色数量 $\hat{c}$。设 $n$ 为图中顶点的数量。为了构建一个图,我们使用一个包含若干个图的工作区。每个图中的每个顶点都有一个颜色。颜色用从 $1$ 到 $\hat{c}$ 的整数表示。最初,我们在工作区中有 $n$ 个图,每个图中有一个顶点,所有顶点都涂成颜色 $1$,且没有边。第 $i$ 个图中的唯一顶点编号为 $i$。

允许进行以下操作:

  • join a b:将包含顶点 $a$ 和 $b$ 的图合并为一个图。不添加边。顶点 $a$ 和 $b$ 必须位于不同的图中。
  • recolor a c1 c2:在包含顶点 $a$ 的图中,将所有颜色为 $c1$ 的顶点重新涂成颜色 $c2$。
  • connect a c1 c2:在包含顶点 $a$ 的图中,在所有满足一个顶点颜色为 $c1$ 而另一个顶点颜色为 $c2$ 的顶点对之间创建边。如果 $c1 = c2$,则不创建自环。如果这样的边已经存在,则创建第二条平行边。本题不允许存在多重边,因此这种情况不应发生。

最后,我们应该得到一个单一的图,且其顶点的颜色无关紧要。

可用于构造图的最小颜色数量 $\hat{c}$ 称为图的团宽(clique width)。团宽是图复杂性的特征之一。许多 NP-hard 问题可以在具有有界团宽的图上,通过利用这种图构建过程进行动态规划,在多项式时间内求解。对于一般图,计算团宽的精确值被认为是 NP-hard 的。然而,对于某些图类,已知其团宽的界限。

仙人掌图(Cactus)是一种连通无向图,其中每条边最多位于一个简单环中。直观地说,仙人掌图是树的一种推广,允许存在一些环。仙人掌图中不允许存在多重边(一对顶点之间有多条边)和自环(连接顶点到自身的边)。已知仙人掌图的团宽不超过 $4$。

给定一个仙人掌图,请找出如何使用最多 $\hat{c} = 4$ 种颜色按上述方式构建它。

输入格式

输入文件的第一行包含两个整数 $n$ 和 $m$ ($1 \le n \le 50\,000$; $0 \le m \le 50\,000$)。其中 $n$ 是图中的顶点数。顶点编号从 $1$ 到 $n$。图的边由一组边不相交的路径表示,$m$ 是这些路径的数量。

接下来的 $m$ 行,每行包含图中的一条路径。路径以一个整数 $k_i$ ($2 \le k_i \le 1000$) 开头,后跟 $k_i$ 个从 $1$ 到 $n$ 的整数。这些 $k_i$ 个整数表示路径上的顶点。路径中相邻的顶点是不同的。路径可以多次经过同一个顶点,但整个输入文件中每条边恰好被遍历一次。

输入文件中的图是一个仙人掌图。

输出格式

第一行输出一个整数 $q$ —— 你需要的操作数量。该数字不应超过 $10^6$。在接下来的 $q$ 行中打印操作。每个操作由其首字母(j 表示 joinr 表示 recolorc 表示 connect)及其参数组成,参数顺序与题目描述中的顺序一致。

最后,在执行完所有这些操作后,应该得到一个图,该图与输入中的仙人掌图相同。这意味着输入图中连接的每一对顶点之间应该恰好有一条边,而输入图中未连接的顶点之间不应有边。

样例

样例输入 1

8 2
5 1 2 3 4 7
5 4 5 6 1 8

样例输出 1

17
r 2 1 2
j 2 3
c 2 1 2
r 6 1 2
j 5 6
c 6 1 2
r 4 1 3
j 4 3
j 4 6
j 4 7
c 4 3 1
r 4 3 1
r 8 1 2
r 1 1 3
j 1 8
j 1 4
c 1 3 2

样例输入 2

15 3
9 1 2 3 4 5 6 7 8 3
7 2 9 10 11 12 13 10
5 2 14 9 15 10

样例输出 2

39
r 7 1 2
r 5 1 2
j 7 8
c 7 1 2
j 5 4
c 5 1 2
r 6 1 3
j 6 7
j 6 5
c 6 3 2
r 3 1 4
j 6 3
c 6 4 1
r 11 1 2
r 13 1 2
j 12 11
j 12 13
c 11 1 2
r 10 1 3
j 12 10
c 10 2 3
r 10 1 2
r 10 4 2
r 15 1 3
j 15 10
c 15 3 3
j 9 10
c 9 1 3
r 9 3 2
r 9 1 4
r 14 1 4
j 9 14
c 9 4 4
r 1 1 4
r 3 1 2
j 2 1
j 2 14
j 2 3
c 2 1 4

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.