#CF1098C. Construct a tree
Construct a tree
markdown
C. 构造一棵树
每个测试的时间限制: 秒
每个测试的内存限制: MB
输入:标准输入
输出:标准输出
Misha 在雪地里散步,他被树木深深吸引,决定画一棵属于自己的树!
Misha 想要构造一棵有 个顶点的有根树,顶点编号从 到 ,其中根节点的编号为 。每个其他顶点都有一个父节点 ,并且称该顶点为顶点 的子节点。顶点 属于顶点 的子树,当且仅当从 不断向上迭代父节点()可以到达 。显然,每个顶点都属于它自己的子树,子树中顶点的数量称为该子树的大小。Misha 只关心那些每个顶点都属于顶点 的子树的树。
下面是一棵有 个顶点的树。顶点 的子树包含顶点 ,因此它的子树大小为 。
树的分支系数定义为所有顶点中子节点数量的最大值。例如,上图中的树的分支系数为 。
你的任务是构造一棵有 个顶点的树,使得所有顶点的子树大小之和等于 ,并且分支系数尽可能小。
输入
仅一行,包含两个整数 和 —— 树的顶点数和所需的子树大小之和(;)。
输出
如果所需的树不存在,则输出 «No»。否则,第一行输出 «Yes»,接下来一行输出 个整数 ,其中 表示顶点 的父节点。
输入样例 1
3 5
输出样例 1
Yes
1 1
输入样例 2
4 42
输出样例 2
No
输入样例 3
6 15
输出样例 3
Yes
1 2 3 1 5
注意
对于第一个样例,一种可能的解法如下图所示。子树大小之和为 ,分支系数为 。
对于第三个样例,一种可能的解法如下图所示。子树大小之和为 ,分支系数为 。