#P14194. [ICPC 2024 Hangzhou R] Heavy-light Decomposition
[ICPC 2024 Hangzhou R] Heavy-light Decomposition
Description
(HLD)是一种应用于树结构的高效查询顶点链的技巧。我们首先来回顾一下 HLD 的定义,以防你忘记了。
给定一棵有 个顶点的有根树,节点编号从 到 。 你需要将每个非根节点分类为重节点或轻节点。 每个非叶子节点恰好有一个子节点被标记为重节点,其余的子节点被标记为轻节点。
对于任意非根节点 ,设 为其父节点。节点 只有在其子树大小在 的所有子节点中最大时才可以被分类为重节点。更正式地,设以 为根的子树大小为 , 表示 的所有子节点的集合。那么,仅当 对所有 成立时, 才能被标记为重节点。注意,可能有多个 的子节点满足这一条件,此时你需要从中选择一个作为重节点,其余的为轻节点。
在上述分类后,可以把树的所有节点划分为若干条不重叠的重链,每个节点属于且只属于一条重链。重链是满足以下所有限制的顶点序列 :
- 要么是根节点,要么是轻节点。
- 对于所有 , 是 的子节点且为重节点。
- 是叶子节点。
:::align{center}

HLD 示例。重链用红色实线标记。 :::
例如,上图展示了一个包含 个顶点的树的合法 HLD,其中重链为 、、、 和 。
Pig100Ton 是 Pigeland 的一名经验丰富的竞赛选手。他想知道,是否可以通过 HLD 得到的若干重链,唯一还原出原来的树结构。具体来说,他会给你原树的顶点数 以及 条重链说明。 第 条重链由两个整数 和 描述,表示该重链为 。
你的任务是,构造出满足以下条件的树,或者告知 Pig100Ton 不可能:
- 这是一棵包含 个顶点、编号为 到 的有根树。
- Pig100Ton 给出的 条链应当对应该树的一个有效 HLD。有效 HLD 指的是一种合法划分每个非根节点为重节点或轻节点的方式,然后能将树分解为若干条不重叠的重链。
Input Format
输入包含多组测试数据。第一行为一个整数 (),表示测试用例的数量。对于每组测试数据:
第一行包含两个整数 和 (,),表示树的节点数以及 HLD 后重链的数量。
接下来的 行中,第 行包含两个整数 和 (),表示第 条重链为 。
保证每个节点恰好属于一条给定的重链。所有测试用例的 之和不超过 。
Output Format
对于每个测试用例:
如果可以构造出这样的树,则输出一行包含 个整数 ,以空格分隔,其中 表示节点 的父节点。如果 ,表示节点 是根节点。如果存在多组方案,输出任意一组即可。
如果无法构造,则输出一行 。
3
12 5
1 5
9 11
7 8
6 6
12 12
4 3
1 1
4 4
2 3
2 2
1 1
2 2
0 1 2 3 4 3 2 7 1 9 10 10
2 0 2 2
IMPOSSIBLE
Hint
对于第一个测试用例,样例输出正对应描述部分中的树。
由 ChatGPT 5 翻译
京公网安备 11011102002149号