QOJ.ac

QOJ

Time Limit: 1 s Memory Limit: 32 MB Total points: 100

#12696. 天然气管道

Statistics

GasBit 公司打算垄断 Byteotia 的天然气市场。专家们已经在 Byteotia 的地图上标记出了最佳的天然气开采点和配送站。现在需要将配送站分配给开采点。每个配送站必须连接到一个且仅一个开采点,反之亦然,每个开采点也必须连接到一个且仅一个配送站。

GasBit 专门建造从开采点通往南向或东向配送站的输气管道——每一条建造的输气管道(从鸟瞰图看)都呈折线状,其每一段连续的线段都向南或向东延伸,且与前一段垂直。公司董事会想知道如何分配配送站和开采点,使得所需管道的总长度最小。管道交叉不是问题,因为碰撞的管道可以铺设在地下不同的深度。

编写一个程序:

  • 从标准输入读取计划中的天然气开采点和配送站的位置,
  • 确定一种配送站到开采点的分配方案,使得连接它们的管道总长度最小,
  • 将结果输出到标准输出。

输入格式

标准输入的第一行包含一个整数 $n$ ($2 \le n \le 50\,000$),表示开采点的数量(等于配送站的数量)。接下来的 $n$ 行,每行包含两个整数 $x_i$ 和 $y_i$ ($0 \le x_i, y_i \le 100\,000$, $1 \le i \le n$),由空格分隔,表示开采点的坐标。$x$ 增加表示向东移动,$y$ 增加表示向北移动。接下来的 $n$ 行,每行包含两个整数 $x'_j$ 和 $y'_j$ ($0 \le x'_j, y'_j \le 100\,000$, $1 \le j \le n$),由空格分隔,表示配送站的坐标。

开采点和配送站均按照它们在输入中出现的顺序,分别用 $1$ 到 $n$ 的整数编号。同一输入数据集中不会出现重复的坐标对。此外,对于每个输入数据集,都存在一种可以通过仅向南或向东延伸的管道实现的配送站到开采点的分配方案。

输出格式

标准输出的第一行应包含一个整数,表示所需建造的所有输气管道的最小总长度。随后应给出达到此最小值的开采点与配送站分配方案的示例描述。接下来的 $n$ 行,每行应包含两个由空格分隔的整数,分别表示应连接的开采点编号和配送站编号。配对的顺序可以是任意的。如果存在多个最优解,程序可以输出其中任意一个。

样例

输入 1

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

输出 1

9
2 3
1 2
3 1

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.