#HK5449. 「UOI 2018 Stage 4 Day1」章鱼

「UOI 2018 Stage 4 Day1」章鱼

题目描述

题目译自 Ukrainian Olympiads in Informatics 2018 Stage 4 Day1 T3. Восьминiг

最近,彼得里克从海边度假回到家中。彼得里克非常喜欢动物,这次度假给他留下最深刻印象的就是各种各样的动物。其中,他最喜欢的是章鱼。

回到家后,彼得里克立刻想要用自己的积木套装建造很多章鱼。这个积木套装由一组灵活的棒子和圆盘组成,可以用棒子连接圆盘。共有 nn 个圆盘,每个圆盘有 aia_i 个孔,可以插入棒子。棒子不能将一个圆盘连接到自身,且任意两个圆盘之间最多只能用一根棒子连接。

在彼得里克的想象中,章鱼的结构如下:

  • 章鱼的身体由三个或更多的圆盘组成,这些圆盘用棒子连接成一个环;
  • 章鱼的触手由多个圆盘组成,这些圆盘用棒子依次连接;
  • 触手可以分叉,但不能合并;
  • 每条触手通过一根棒子连接到章鱼身体上的某个圆盘。

请注意,章鱼可以有多个触手,也可能一条触手都没有。此外,多条触手可以连接到身体上的同一个圆盘。

17ossf1a4p7pn29jtisdge5ir0.png

帮助彼得里克建造章鱼,要求满足以下条件:

  • 必须使用所有的圆盘;
  • 每个圆盘上的每个孔都必须插入一根棒子;
  • 在某些子任务中,需要使建造的章鱼数量尽可能多。

输入格式

输入文件的第一行包含一个整数 nn (1n105)(1 \leq n \leq 10^5),表示彼得里克积木套装中的圆盘数量。

第二行包含 nn 个整数 aia_i (1ai<n)(1 \leq a_i < n),表示第 ii 个圆盘上的孔数。

第三行包含一个整数 maximizemaximize,值为 00 表示不需要最大化章鱼数量,值为 11 表示需要最大化章鱼数量。

输出格式

输出文件的第一行应输出 Yes,如果可以建造章鱼;否则输出 No。如果答案为 Yes,则输出一个整数 cc,表示章鱼的数量。接下来输出 nn 行,第 ii 行包含两个整数 numinum_i (1numic)(1 \leq num_i \leq c)pip_i,分别表示圆盘 ii 所属的章鱼编号,以及与圆盘 ii 相连的、距离章鱼身体更近的相邻圆盘的编号。如果圆盘 ii 属于章鱼的身体,则认为 pi=1p_i = -1

为更好地理解输出格式,请参考后面的样例。

9
2 1 2 1 1 1 4 3 3
1

Yes
1
1 -1
1 7
1 -1
1 7
1 8
1 9
1 -1
1 -1
1 -1

11
2 2 2 3 3 3 2 2 1 1 1
1

Yes
2
2 -1
2 -1
2 -1
2 -1
2 -1
1 -1
1 -1
1 -1
2 4
2 5
1 6

第一个样例对应图示中的第一个章鱼,第二个样例对应图示中的第二个和第三个章鱼。

请注意,对于给出的样例,可能存在其他满足所有要求的构造方案。

4
2 3 2 3
1

No

数据范围与提示

详细子任务附加限制及分值如下表所示:

子任务 分值 附加限制
11 99 对于所有 iiai{1,3}a_i \in \{1,3\},不需要最大化章鱼数量
22 1313 对于所有 iiai{1,3}a_i \in \{1,3\},需要最大化章鱼数量
33 2727 不需要最大化章鱼数量
44 5151 需要最大化章鱼数量