[ARC095F]Permutation Tree

最近刷AtCoder,觉得刷得挺爽的,每次的F题都有一定难度,但是却还是挺可做的>_<反正AtCoder对于我这种英文不好的选手来说非常友善,看一眼就读完题面了

题意

Takahashi有一种能力以以下步骤用一个排列 (p1,p2,,pn) ( p 1 , p 2 , ⋯ , p n ) 来生成一棵树:

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

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

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

分析

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

你可能感兴趣的:(图论)