CF1311E Construct the Binary Tree
题目描述
给定两个整数 $n$ 和 $d$,你需要构造一棵有 $n$ 个结点的有根二叉树,根结点为 $1$,并且所有结点的深度之和等于 $d$。
树是一个无环连通图。有根树有一个特殊的结点称为根。结点 $v$ 的父亲是从根到 $v$ 的路径上最后一个不同于 $v$ 的结点。结点 $v$ 的深度是从根到 $v$ 的路径长度。结点 $v$ 的子结点是所有以 $v$ 为父亲的结点。二叉树是指任意结点的子结点数不超过 $2$ 的树。
你需要回答 $t$ 组独立的测试用例。
输入格式
输入的第一行包含一个整数 $t$($1 \le t \le 1000$),表示测试用例的数量。
每个测试用例仅一行,包含两个整数 $n$ 和 $d$($2 \le n, d \le 5000$),分别表示树的结点数和所有结点深度之和。
保证所有测试用例中 $n$ 的总和与 $d$ 的总和均不超过 $5000$($\sum n \le 5000, \sum d \le 5000$)。
输出格式
对于每个测试用例,输出答案。
如果无法构造出满足条件的树,第一行输出 “NO”(不带引号)。否则,第一行输出 “YES”,第二行输出 $n-1$ 个整数 $p_2, p_3, \dots, p_n$,其中 $p_i$ 表示结点 $i$ 的父亲。你输出的父亲序列应描述一棵二叉树。
说明/提示
下图对应样例的第一个和第二个测试用例:


由 ChatGPT 4.1 翻译