[ARC095F]Permutation Tree

最近刷AtCoder,觉得刷得挺爽的,每次的F题都有一定难度,但是却还是挺可做的>_<反正AtCoder对于我这种英文不好的选手来说非常友善,看一眼就读完题面了
###题意
Takahashi有一种能力以以下步骤用一个排列 ( p 1 , p 2 , ⋯   , p n ) (p_1,p_2,\cdots,p_n) (p1,p2,,pn)来生成一棵树:

首先,按照以下操作准备顶点 1 ⋯ N 1\cdots N 1N。对于顶点 i i i

  • 如果 p i = 1 p_i=1 pi=1,什么都不做
  • 如果 p i ≠ 1 p_i\neq 1 pi=1,让 j ′ j' j表示最大的满足 p j < p i p_j<p_i pj<pi j j j。在 j ′ j' j i i i之间连一条边

给出按照这个过程建立的一棵树,判定是否能够用另外一个排列做出一棵与此同构的树,问这个要求字典序最小的排列应该是什么,无解输出 − 1 -1 1
1 ≤ n ≤ 1 0 5 1\leq n\leq10^5 1n105

###分析
考虑我们将这个操作的过程改写成:一开始全是黑点,然后我们将 p i p_i pi按照升序排列,考虑为原来的 i i i。然后我们令一个 m a x = − 1 max=-1 max=1,考虑从左到右扫一遍,如果发现 i > m a x i>max i>max,那么将 i i i染红,并将 m a x max max替换成 i i i;如果当前的 p i ≠ 1 p_i\neq 1 pi=1,那么连边(注意一下,原来的过程那里, j j j并不一定小于 i i i……这里是对于全局的……)。
这个过程符合原来的性质,因为每次和某个点连接的红点,肯定是比 p i p_i pi小,而且最接近。这时候我们会发现,我们得到的这个红点之间的链,相当于一条“直径”的东西,然后剩下的黑点都向着这个直径上连边,而且显然黑点之间没有边。
实际上按照原来的过程也可以感受出来,某一个 p i p_i pi很小但是 i i i很大的点,可能会能够“占领”一大堆点,直到某一个 i i i更大的点出现。
这样的图是一个“毛虫图”。如果给定的图不是一个“毛虫图”,那肯定不对,这和我们刚刚证明的不一样……至于要字典序最小,那直接反向构造即可。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值