P13041 [GCJ 2021 #3] Fence Design

题目描述

你被临时雇佣为围栏建设公司的员工,负责完成一块场地的围栏设计工作。每条围栏必须沿着直线连接两根立柱。每根立柱占据一个固定点,且**任意三根立柱不共线**。围栏之间**不能相互交叉**,但可以在端点(立柱位置)处相连。 前员工在项目中已经铺设了两条围栏后就离职了。现在需要由你来完成剩余设计。为了让老板和客户满意,你希望在不考虑围栏长度的情况下,尽可能多地添加围栏。 给定所有立柱的位置和已建好的两条围栏,请找出可以添加的**最大数量**的围栏,使得所有围栏(包括已有的和新增的)两两之间不交叉(仅在端点处相连是允许的)。

输入格式

输入的第一行包含测试用例数量 $\mathbf{T}$。随后是 $\mathbf{T}$ 组测试用例: 1. 每组测试用例的第一行是一个整数 $\mathbf{N}$,表示立柱数量。 2. 接下来 $\mathbf{N}$ 行,每行包含两个整数 $\mathbf{X}_i$ 和 $\mathbf{Y}_i$,表示第 $i$ 根立柱的坐标。 3. 最后两行分别描述已有的两条围栏,每行包含两个整数 $\mathbf{P}_k$ 和 $\mathbf{Q}_k$,表示第 $k$ 条围栏连接第 $\mathbf{P}_k$ 根和第 $\mathbf{Q}_k$ 根立柱(立柱编号从 1 开始)。

输出格式

对于每组测试用例: 1. 首先输出一行 `Case #x: y`,其中 $x$ 是测试用例编号(从 1 开始),$y$ 是能添加的围栏最大数量(不包括已有围栏)。 2. 接着输出 $y$ 行,每行包含两个不同的整数 $i$ 和 $j$($1 \leq i, j \leq \mathbf{N}$),表示新增的围栏连接第 $i$ 根和第 $j$ 根立柱。 3. 所有围栏(包括已有的和新增的)必须满足两两不交叉(仅在端点处允许相连)。

说明/提示

**样例解释** 下图展示了样例中的立柱和围栏布局。蓝色加粗线条表示已有围栏,其余线条表示样例输出中添加的围栏方案: ![](https://cdn.luogu.com.cn/upload/image_hosting/j0yr6b9n.png) ![](https://cdn.luogu.com.cn/upload/image_hosting/is24xybt.png) **数据范围** - $1 \leq \mathbf{T} \leq 50$。 - 对所有 $i$,$-10^9 \leq \mathbf{X}_i, \mathbf{Y}_i \leq 10^9$。 - 对所有 $i \neq j$,$(\mathbf{X}_i, \mathbf{Y}_i) \neq (\mathbf{X}_j, \mathbf{Y}_j)$。 - 对所有 $k$,$1 \leq \mathbf{P}_k < \mathbf{Q}_k \leq \mathbf{N}$。 - 已有围栏之间不交叉(仅在端点处允许相连)。 - 任意三根立柱不共线。 **测试集 1(11 分,可见判定)** - 时间限制:60 秒。 - $4 \leq \mathbf{N} \leq 100$。 **测试集 2(19 分,隐藏判定)** - 时间限制:90 秒。 - $4 \leq \mathbf{N} \leq 10^5$。 翻译由 DeepSeek V3 完成