#P6844. [CEOI2019] Building Skyscrapers

[CEOI2019] Building Skyscrapers

题目描述

在 2D 平面上,有 nn 个计划建摩天楼的格子,第 ii 座计划建的摩天楼的格子位于 (ri,ci)(r_i,c_i)

您可以选择任意一种建摩天楼的顺序,但是要满足如下设定:

  • 设建摩天楼的顺序为 ss
  • 对于任意 2in2\le i\le n,都要保证,第 sis_i 座至少和前面任意一座摩天楼有公共边或公共角。
  • 对于任意 1in1\le i\le n,都要保证,从第 sis_i 座计划建摩天楼的格子到 2D 平面的边界,有路径相连(从一个格子只能走到与其有公共边的格子),且路径上除第 sis_i 座摩天楼无其他摩天楼。

同时会输入一个 tt,表示输出的类别:

  • t=1t=1,您需要构造任意一种建造的顺序。
  • t=2t=2,您需要构造 (sn,sn1,,s1)(s_n, s_{n - 1}, \dots, s_1) 字典序最大的建造顺序。

输入格式

第一行一个整数 nn

第二行一个整数 tt

接下来 nn 行,每行两个整数 ri,cir_i,c_i,第 ii 行表示第 ii 座计划建的摩天楼的坐标为 (ri,ci)(r_i,c_i)

输出格式

第一行为一个字符串 YES 或者 NO,表示是否有一种可行的方案。

若有一种可行的方案,接下来输出 nn 行,一行一个整数表示您构造的方案。

  • t=1t=1,您需要构造任意一种建造的顺序。
  • t=2t=2,您需要构造 (sn,sn1,,s1)(s_n, s_{n - 1}, \dots, s_1) 字典序最大的建造顺序。
3
2
0 0
0 1
0 2
YES
1
2
3

3
1
0 0
1 1
2 2
YES
2
3
1
2
1
0 0
0 2

NO

提示

样例解释

样例 1 解释

这是三个摩天楼连成一行,自然有如下几种解:

  • 1,2,31,2,3
  • 2,1,32,1,3
  • 2,3,12,3,1
  • 3,2,13,2,1

因为 t=2t=2,所以输出第一种。

样例 2 解释

和样例 1 的区别只是三个摩天楼连成一条对角线,与样例 1 的解一致,又因为 t=1t=1,随便输出一组即可。

样例 3 解释

两个摩天楼无相交部分,自然无法建立。

数据范围

对于 100%100\% 的数据,保证 1n1.5×1051\le n\le 1.5\times 10^51t21\le t\le 2ri,ci109\lvert r_i \rvert,\lvert c_i \rvert\le 10^9

详细子任务限制及分值如下表:

子任务编号 限制 分值
1 t=1t=1n10n\le 10 88
2 t=1t=1n200n\le 200 1414
3 t=1t=1n2×103n\le 2\times 10^3 1212
4 t=2t=2n2×103n\le 2\times 10^3 1717
5 t=1t=1 2020
6 t=2t=2n7×104n\le 7\times 10^4ri,ci900\lvert r_i \rvert,\lvert c_i \rvert\le 900 1010
7 t=2t=2 1919

说明

本题译自 Central-European Olympiad in Informatics 2019 Day 1 T1 Building Skyscrapers