QOJ.ac

QOJ

Límite de tiempo: 2 s Límite de memoria: 1024 MB Puntuación total: 100

#6103. A+B Problem

Estadísticas

在构造题和杂题的时代,还有什么比把两个查询问题合二为一更亵渎的呢?

KOI 市由 $N$ 个路口和 $N - 1$ 条双向道路组成。你只能通过给定的道路在两个不同的路口之间通行。换句话说,该市的道路网络构成了一棵树。道路位于二维平面上,且除端点外,任意两条道路互不相交。每条道路都有一个非负整数权重,代表通过该道路所需的时间。

直到几十年前,KOI 市还是一个小镇,但随着人口的涌入,它开始迅速扩张。在快速扩张的过程中,为了行政方便,市长将路口编号为 $1$ 到 $N$。该编号系统满足以下性质:

  • 路口 $1$ 是城市的中心,且至少连接 $2$ 条道路。
  • 分配给路口的编号构成了以路口 $1$ 为根的树的一种先序遍历:对于任何子树,其根节点的编号是该子树中最小的编号。
  • 对于每个路口,考虑所有相邻(直接通过道路连接)路口中编号最小的一个。当你从该路口开始,按逆时针顺序排列所有相邻路口时,编号是递增的。

随着大量人口涌入 KOI 市,交通拥堵问题日益严重。为了解决这个问题,市长用外环路连接了最外围的城市。设 $\{v_1, v_2, \dots, v_k\}$ 为所有仅连接一条道路的路口的编号,按递增顺序排列。对于每个 $1 \le i \le k$,市长在路口 $v_i$ 和路口 $v_{(i \mod k)+1}$ 之间修建了一条双向道路。每条道路的权重为非负整数 $w_i$。由于编号系统的特性,你可以观察到,外环路可以在二维平面上添加,使得任意两条道路除端点外在任何位置都不相交。

然而,解决交通拥堵只会缩短通勤时间,使资本家更容易剥削工人。工人们不会上资本家恶心的当——他们想回到过去,那时他们可以在 KOI 市应用重链剖分和质心分解!工人们成功发动了社会主义革命,推翻了资本主义政权。现在,他们想通过创建一棵满足以下条件的新树来重建现有的 KOI 市结构:

  • 设 $K$ 为新树中顶点的数量;需满足 $K \le 4N$。从现在起,我们将新树的顶点标记为 $1, 2, \dots, K$。
  • 对于新树的每个顶点 $i$,都有一个对应的集合 $X_i$,它是 $\{1, 2, \dots, N\}$ 的子集。
  • 对于 KOI 市中的所有道路(包括树边和外环路边)$(u, v)$,存在一个集合 $X_i$ 使得 $\{u, v\} \subseteq X_i$。
  • 对于所有 $1 \le j \le N$,设 $S_j$ 为满足 $j \in X_i$ 的顶点 $1 \le i \le K$ 的集合。则 $S_j$ 必须非空,且必须是新树上的一个“革命集”。
  • 对于所有 $1 \le i \le K$,满足 $|X_i| \le 4$。

对于一棵树 $T$ 和一个作为 $T$ 顶点子集的集合 $S$,如果对于所有顶点 $u, v \in S$,它们在 $S$ 下连通,则称集合 $S$ 在 $T$ 上是革命性的。如果存在一条仅经过 $S$ 中顶点的 $T$ 中的路径,则称两个顶点 $(u, v)$ 在 $S$ 下连通。

例如,考虑下图所示的树和集合 $S = \{1, 2, 3, 4, 5, 6\}$。

在这种情况下,$(1, 2)$、$(3, 5)$ 和 $(4, 6)$ 在 $S$ 下连通,而 $(1, 6)$ 和 $(2, 7)$ 在 $S$ 下不连通。

输入格式

第一行包含 KOI 市的路口数量 $N$ ($4 \le N \le 100\,000$)。 接下来的 $N - 1$ 行,每行包含一个整数 $p_i$。这表示存在一条连接路口 $p_i$ 和路口 $i + 1$ 的双向道路 ($1 \le p_i \le i$)。注意,这些不是外环路。

输出格式

第一行输出新树的顶点数量 $K$。你的答案需满足 $1 \le K \le 4N$。 然后输出 $K$ 行。在第 $i$ 行,输出 $|X_i| + 1$ 个空格分隔的整数。第一个整数应为集合 $X_i$ 的大小。接下来的 $|X_i|$ 个整数应为 $X_i$ 中的元素,顺序不限。 在接下来的 $K - 1$ 行中,每行输出两个空格分隔的整数 $a$ 和 $b$,表示新树中存在一条连接 $a$ 和 $b$ 的边。

可以证明答案总是存在的。

样例

输入格式 1

4
1
1
1

输出格式 1

1
4 1 2 3 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.