P17000 [NWERC 2019] 平衡裁剪 / Balanced Cut

题目背景

译自 [Northwestern Europe Regional Contest (NWERC) 2019](http://2019.nwerc.eu)。

题目描述

Anna van Lier 教授正在准备一节关于平衡二叉搜索树的课。回忆一下,平衡二叉搜索树具有两个性质: - **平衡树:** 对每个结点,其左子树高度和右子树高度之差至多为 $1$。例如在下图中,结点 $7$ 的左、右子树高度分别为 $2$ 和 $1$。如果一个结点没有左子树或右子树,则对应子树的高度视为 $0$。 - **搜索树:** 每个结点有一个值。某个结点的值大于其左子树中的所有值,并且小于其右子树中的所有值。例如在下图中,结点 $7$ 的左子树包含值 $4,5,6$,它们都小于 $7$。 Anna 从同事那里得到了一张这样的树的图。这棵树有 $n$ 个结点,结点值为 $1$ 到 $n$。但是这棵树太大了,无法放进她的幻灯片中,所以她想把它变小。 具体来说,她想从树中擦除一些结点,使得最后恰好剩下 $k$ 个结点。每当她擦除一个结点时,也会一并擦除该结点的所有子树。当然,得到的树仍然必须是一棵平衡二叉搜索树。 出于教学目的,Anna 希望最终树中的结点值尽量小。因此,她希望剩下的 $k$ 个结点值组成的列表按字典序尽可能小。例如,与包含值 $2,6,7$ 的树相比,她更喜欢包含值 $2,5,9$ 的树。 Anna 忙于处理更重要的事情,因此寻找应该擦除哪些结点的任务就交给了她的助教,也就是你。 :::align{center} ![](https://cdn.luogu.com.cn/upload/image_hosting/ccekjhl7.png) :::

输入格式

输入包含: - 第一行包含两个整数 $n$ 和 $k$ ($2 \le n \le 5\cdot 10^5$, $1 \le k \le n-1$),分别表示树中结点数和需要保留的结点数。 - 接下来 $n$ 行,第 $i$ 行包含一个整数 $p_i$ ($1\le p_i\le n$ 或 $p_i=-1$),表示值为 $i$ 的结点的父亲;若值为 $i$ 的结点是根,则 $p_i=-1$。 保证给定的树是一棵平衡二叉搜索树。

输出格式

输出一行长度为 $n$ 的二进制字符串。第 $i$ 个字符应为 `1`,当且仅当值为 $i$ 的结点应被保留;否则应为 `0`。

说明/提示

【数据规模与约定】 - $2 \le n \le 5\cdot 10^5$。 - $1 \le k \le n-1$。 - 对每个结点,$1\le p_i\le n$ 或 $p_i=-1$。 - 给定的树保证是一棵平衡二叉搜索树。