#P9088. 「HNOI2021 省集 Day6」排序

「HNOI2021 省集 Day6」排序

题目描述

给定一棵 nn 个点并以 11 号点为根的树,每个点的儿子不超过 KK 个。

每一个叶子节点都可以从若干的权值中选择一个,每一个非叶子点的权值序列为儿子节点的权值以任意顺序连接而成,例如:

一个点的权值为 [1,3][1,3],它的兄弟的权值为 [2,4,10][2,4,10],那么它的父亲要么是 [1,3,2,4,10][1,3,2,4,10],要么是 [2,4,10,1,3][2,4,10,1,3]

现在,试构造一组方案,使得 11 号点的权值序列为一个上升序列,如果无解,输出 No,如果有解,先输出 Yes 输出你构造的方案。

输入格式

sort.in 中读入数据。

第一行为一个正整数 nn

接下来 nn 行,每行描述一个节点。

  • 如果第一个数为 11,表示这个点不是叶子节点,接下来一个正整数 kik_i,表示这个点有 kik_i 个儿子,接下来 kik_i 个整数表示它的所有儿子。
  • 如果第一个数为 22,表示这个点是叶子节点,接下来一个正整数 mim_i,表示有 mim_i 个待选的权值,接下来 mim_i 个整数表示这些权值 vv

输出格式

输出到 sort.out 中。

第一行一个字符串 YesNo,表示是否可行。

如果是 Yes,接下来 nn 行,每一行表示一个节点的方案。

  • 对于叶子节点,输出一个数字,表示该叶子选择的值。
  • 对于非叶子节点,输出按照什么顺序对儿子的权值进行连接。

样例

样例 1

6
1 3 5 4 6
2 3 10 61 60
2 2 80 20
2 2 40 70
1 2 3 2
2 4 30 90 91 92
Yes
5 6 4
10
20
40
2 3
30

RLyAvd.png

22 号节点选择了 1010

33 号节点选择了 2020

55 号点 [1020][10,20]

44 号点选了 4040

66 号点选了 3030

11 号点按 5645,6,4 的顺序合并 [10203040][10,20,30,40]

样例 2

5
1 2 2 3
2 1 2
1 2 4 5
2 1 1
2 1 3
No

样例 3、4、5、6

见附加文件中 sort*.insort*.out

数据范围

对于所有数据,保证 2n,mi,v1052\le n,\sum m_i,v\le10^51K81\le K\le 81kiK1\le k_i\le K11 号节点为根。

子任务编号 n,min,\sum m_i\le KK\le 分值
11 1010 22 1010
22 2020 88 44
33 100100 22 33
44 55
55 88
66 500500 22
77 55
88 88
99 2×1032\times 10^3 22
1010 55 66
1111 88
1212 10510^5 22 1313
1313 55 1818
1414 88 2222