#406. [R65D]构造树

[R65D]构造树

时空限制

1S/512M

题目描述

nn 个编号为 11nn 的点。你需要构造一棵有根树。

对于每个点 ii,给定两个整数:

  • did_i:点 ii 在树中的深度(根节点的深度为 00);
  • cic_i:点 ii 最多可以拥有的儿子数量。

对于任意非根节点 ii,其父亲的编号是 pip_i

在所有合法的构造中,你需要使父亲数组 p1,p2,,pnp_1, p_2, \dots, p_n 的字典序最小(其中根节点的父亲记为 00)。

保证存在至少一种合法的构造方法。

格式

输入格式

第一行输入一个正整数 nn

接下来 nn 行,每行输入两个非负整数 did_icic_i,表示第 ii 个点的深度和最大儿子数量。

输出格式

输出一行 nn 个整数 p1,p2,,pnp_1, p_2, \dots, p_n,中间用单个空格隔开,表示字典序最小的合法父亲数组。

样例

样例输入 #1

6
0 3
1 2
1 0
2 0
2 0
1 1

样例输出 #1

0 1 1 2 2 1

样例解释 #1

各个点的深度和最大儿子数如下:

  • 11:深度 00,最大儿子数 33
  • 22:深度 11,最大儿子数 22
  • 33:深度 11,最大儿子数 00
  • 44:深度 22,最大儿子数 00
  • 55:深度 22,最大儿子数 00
  • 66:深度 11,最大儿子数 11

构造出的树结构为:

  • 11 为根节点,p1=0p_1 = 0
  • 深度为 11 的点 2,3,62, 3, 6 的父亲均为 11(即 p2=1,p3=1,p6=1p_2 = 1, p_3 = 1, p_6 = 1)。点 11 的实际儿子数量为 333 \le 3
  • 深度为 22 的点 4,54, 5 的父亲均为 22(即 p4=2,p5=2p_4 = 2, p_5 = 2)。点 22 的实际儿子数量为 222 \le 2

最终的父亲数组为 0 1 1 2 2 1,这是所有合法构造中字典序最小的。

样例输入 #2

3
0 1
1 1
2 0

样例输出 #2

0 1 2

样例解释 #2

深度关系为 11(深度 0) 2\to 2(深度 1) 3\to 3(深度 2)。 对应的父亲数组为 0 1 2

数据规模

注意:你只有通过了子任务的所有测试点,才能获得对应子任务的分数。

子任务编号 分数 nn\le
11 2020 20002000
22 8080 2×1052\times 10^5

对于 100%100\% 的数据,1n2×1051 \le n \le 2 \times 10^50din10 \le d_i \le n - 10cin0 \le c_i \le n