题目描述
有一棵包含 N 个顶点的树,顶点编号为 1 到 N。树的第 i 条边连接了顶点 ui 和顶点 vi,且为双向边。
对于 1 到 N 的一个排列 P=(P1,…,PN),定义 f(P) 如下:
- 对于每个顶点 i (1≤i≤N),从顶点 1 到顶点 i 的一条简单路径记为 (v1=1,v2,…,vk=i),则 (Pv1,Pv2,…,Pvk) 的最长严格递增子序列的长度记为 Li。定义 f(P)=∑i=1NLi。
给定整数 K,请判断是否存在一个排列 P 使得 f(P)=K,如果存在,请给出一个这样的排列。
最长递增子序列的定义
数列的子序列是指从原数列中删除 0 个或多个元素后,按原顺序连接剩余元素得到的新数列。例如,(10,30) 是 (10,20,30) 的子序列,但 (20,10) 不是 (10,20,30) 的子序列。
数列的最长递增子序列是指所有严格单调递增的子序列中长度最大的一个。
简单路径的定义
在图 G 上,对于顶点 X,Y,顶点序列 (v1,v2,…,vk),若 v1=X,vk=Y,且对于 1≤i≤k−1,vi 和 vi+1 有边相连,则称其为从 X 到 Y 的步行。如果 v1,v2,…,vk 均互不相同,则称其为从 X 到 Y 的简单路径(或简称路径)。
输入格式
输入按以下格式从标准输入给出:
N K
u1 v1
⋮
uN−1 vN−1
输出格式
如果不存在满足 f(P)=K 的排列 P,输出 No。
如果存在满足 f(P)=K 的排列 P,输出如下格式:
Yes P1 P2 … PN
如果有多个满足条件的排列 P,输出任意一个均可。
样例 1
输入
5 8
1 2
2 3
2 4
4 5
输出
Yes
3 2 1 4 5
样例 2
输入
7 21
2 1
7 2
5 1
3 7
2 6
3 4
输出
No
样例 3
输入
8 20
3 1
3 8
7 1
7 5
3 2
6 5
4 7
输出
Yes
2 1 3 5 6 8 4 7
说明/提示
数据范围
- 输入的所有数均为整数。
- 2≤N≤2×105
- 1≤K≤1011
- 1≤ui,vi≤N
- 给定的图保证是一棵树。
样例解释 1
当 P=(3,2,1,4,5) 时,f(P) 的计算如下:
- 从顶点 1 到顶点 1 的简单路径为 (1),(P1)=(3) 的最长递增子序列长度为 1,所以 L1=1。
- 从顶点 1 到顶点 2 的简单路径为 (1,2),(P1,P2)=(3,2) 的最长递增子序列长度为 1,所以 L2=1。
- 从顶点 1 到顶点 3 的简单路径为 (1,2,3),(P1,P2,P3)=(3,2,1) 的最长递增子序列长度为 1,所以 L3=1。
- 从顶点 1 到顶点 4 的简单路径为 (1,2,4),(P1,P2,P4)=(3,2,4) 的最长递增子序列长度为 2,所以 L4=2。
- 从顶点 1 到顶点 5 的简单路径为 (1,2,4,5),(P1,P2,P4,P5)=(3,2,4,5) 的最长递增子序列长度为 3,所以 L5=3。
因此,f(P)=1+1+1+2+3=8。由此可知,样例输出的 P 满足 f(P)=8。此外,例如 P=(3,2,4,5,1) 也满足条件。
样例解释 2
可以证明不存在满足 f(P)=21 的排列 P。
由 ChatGPT 4.1 翻译