CF1379E Inverse Genealogy
题目描述
Ivan 热衷于研究家谱学。目前他正在研究一种特殊的家谱结构,这个结构包含若干人。在这种结构中,每个人要么有两个父母都已指定,要么没有父母。此外,除了一位特殊的人外,每个人恰好有一个孩子,这位特殊的人没有任何孩子。
这些人被方便地编号为 $1$ 到 $n$,$s_i$ 表示第 $i$ 个人的孩子(对于唯一没有孩子的人,$s_i = 0$)。
我们称 $a$ 是 $b$ 的祖先,当且仅当 $a = b$,或者 $a$ 有一个孩子,该孩子是 $b$ 的祖先。也就是说,$a$ 是 $a$、$s_a$、$s_{s_a}$ 等的祖先。
如果某个人 $i$ 有两个父母,并且其中一个父母的祖先总数至少是另一个父母的两倍,则称此人为“不平衡”的。
Ivan 统计了结构中不平衡的人的数量,总共有 $k$ 个。但他不确定自己的计算是否正确,他想知道是否存在一种包含 $n$ 个人且恰好有 $k$ 个不平衡人的结构。请你帮助他找出这样一种结构,或者判断其不存在。
输入格式
输入包含两个整数 $n$ 和 $k$($1 \leq n \leq 100\,000$,$0 \leq k \leq n$),分别表示总人数和不平衡人数。
输出格式
如果不存在包含 $n$ 个人且有 $k$ 个不平衡人的结构,输出 NO。
否则,第一行输出 YES,第二行输出 $n$ 个整数 $s_1, s_2, \ldots, s_n$($0 \leq s_i \leq n$),表示每个人的孩子编号(如果没有孩子则为 $0$)。
说明/提示
在第一个样例中,可以构造一个包含 3 个人的结构,其中有 1 个人有 2 个父母。
在第二个样例中,可以使用如下结构:

只有第 1 个人是不平衡的,因为他的一个父母有 1 个祖先,另一个父母有 3 个祖先。
由 ChatGPT 4.1 翻译