QOJ.ac

QOJ

実行時間制限: 5.0 s メモリ制限: 256 MB 満点: 100

#18505. 章鱼花园

統計

章鱼们以最美丽的方式分布在平面海底的表面上。如果章鱼的位置将海底平面划分为若干三角形,使得章鱼的头部位于三角形的顶点,且三角形的边由它们伸展的触手组成,那么章鱼们就会喜欢它们的位置。它们将这种划分称为三角剖分(triangulation)。让我们借助图论来使这个概念正式化。

一个平面图(planar graph)是一个可以画在平面上且没有任何边相互交叉的图。

在没有交叉的平面图中,一个(face)是一个简单环,它围成一个内部没有边或顶点的区域。

在没有交叉的平面图中,外部面(outer face)是面积无限的区域。

平面上点集的三角剖分是一个连通平面图,其顶点位于这些点上,且除外部面外的每个面都是由该图的恰好三条边构成的非退化三角形。

如果两个三角形有一条公共边,则称它们边相邻(connected by side)。

如果一个三角形的某条边与外部面接触,则称该三角形与外部面边相邻

我们用 $S$ 表示该三角剖分的面集。

$S$ 中的元素序列如果满足任意两个相邻元素都是边相邻的,则称为一条路径(path)。

如果对于 $S$ 的某个子集中的任意两个元素,都存在一条完全由该子集中的元素组成的路径,则称该子集是边连通(connected by side)的。

我们给定一个三角剖分 $S$。

考虑 $S$ 的一个不包含外部面的子集。如果它满足以下条件,我们称该子集是单连通(simply connected)的:

  • 该子集是边连通的;
  • 该子集在 $S$ 中的补集也是边连通的。

章鱼们喜欢单连通集,因为它们计划沿着这些子集的边界进行围道积分。

三角剖分中的其中一个三角形被固定为起始三角形。

请帮助章鱼们找到一个包含三角剖分中所有三角形的序列,该序列以起始三角形开始,并且对于任意 $1 \le i \le K$(其中 $K$ 是三角形的总数),三角形集合 $T_1, T_2, \dots, T_i$ 是单连通的。

章鱼按它们被描述的顺序从 $1$ 开始编号。一只章鱼可以有任意数量的触手,而不像自然界中那样只有八只。

已知 $S$ 中除外部面以外的所有元素组成的子集是边连通的。该子集所有元素的并集形成一个凸多边形。

输入格式

输入的第一行包含两个整数 $N$($3 \le N \le 100\,000$)和 $M$:章鱼的数量以及由它们伸展的触手形成的边的数量。

第二行包含三个整数 $A$、$B$ 和 $C$:占据起始三角形顶点的章鱼编号。

接下来的 $N$ 行,每行包含两个整数 $X$ 和 $Y$:章鱼所在的海底平面上的点坐标($-10\,000 \le X, Y \le 10\,000$)。所有这些点都是互不相同的。

接下来的 $M$ 行,每行包含两个整数 $U$ 和 $V$:表示两只章鱼的编号,它们的触手相连形成一条边。

输出格式

输出的第一行,打印一个整数 $K$:由章鱼形成的三角形数量。

在接下来的 $(K - 1)$ 行中,每行打印三个整数 $P_i^{(1)}, P_i^{(2)}, P_i^{(3)}$:组成三角形 $T_i$($2 \le i \le K$)的三只章鱼的编号。

对于每个满足 $1 \le i \le K$ 的 $i$,三角形集合 $T_1, T_2, \dots, T_i$ 必须是单连通的。如果存在多个可能的解,输出其中任意一个即可。

样例

输入 1

6 9
1 2 3
2 0
1 1
3 1
0 2
2 2
4 2
1 2
1 3
2 3
2 4
2 5
3 5
3 6
4 5
5 6

输出 1

4
2 3 5
2 4 5
3 5 6

输入 2

3 3
1 2 3
1 1
1 2
2 1
1 2
2 3
3 1

输出 2

1

说明

在第一个样例中:

  • 第一个三角形由章鱼 1, 2, 3 组成,第二个由 2, 4, 5 组成的三角形序列是不正确的,因为不满足其中一个条件:这两个三角形不是边相邻的;
  • 第一个三角形由章鱼 1, 2, 3 组成,第二个由 2, 3, 5 组成的三角形序列是正确的;
  • 第一个三角形由章鱼 1, 2, 3 组成,第二个由 3, 5, 6 组成,第三个由 2, 4, 5 组成的三角形序列是不正确的,因为两个条件都不满足:该序列形成的集合不是边连通的,且其补集也不是边连通的。

第二个样例只包含一个三角形,因此只需输出一个整数 $K$。

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.