ARC095D Permutation Tree
题意:对于一个排列
对于每一个
给出树
先考虑给定排列
考虑
- 对于每一个
,找到最大的 使得 ,然后在 间连边。
这条规则变为:
- 对于每一个
,找到最大的 使得 ,然后在 间连边。
也就是说,
最终产生的树是这样的 : 每个位置向自己前方的最大值连边,所有前缀最大值形成一条链,其余的点连接在链上,形成一条毛毛虫。
所有毛毛虫都是可以构造出来的。
判定
设直径两端分别为
- 结论:
字典序最大 字典序最小。( 指 的逆的反转 )
于是,从末端开始从大到小贪心标号。先编号直径上的点
复杂度