题目链接:https://www.luogu.com.cn/problem/P6776
前言
作为一个APIO只能得40分的蒟蒻,参加了NOI结果也是非常的惨,具体就不提了。
Day2 T2 超现实树是一道我思考了很多的题,Day2的大部分时间花在上面。但我依旧没有得到正解。于是,在赛后,查了题解,又思考了很久,终于想明白了。些这篇题解主要是帮助和我刚开始陷入了同样的思维怪圈,因此一直没想明白这题的人。
思路与证明
- 考虑证明:在所有可能被生成或输入的树中,只有一种树需要被考虑到,称之为“链树”。它满足 m i n ( s i z e [ l s ] , s i z e [ r s ] ) < = 1 min(size[ls],size[rs])<=1 min(size[ls],size[rs])<=1,也就是左右子树大小的最小值不超过1,可以理解为一条链上长出若干个叶子结点(当然,也可以是0个叶子结点)。
- 满足了上面的性质,就只需要考虑输入数据中的链树了,也只需要设法生长得到无数棵链树即可。
第一部分 证明只有链树是有用的
- 证明输入的数据中我们只需要使用链树,其余的可以忽略。
- 证明 g r o w ( T ) grow(T) grow(T)是几乎完备的,等价于只有有限个链树不可以被生长得到。
第一条 证明:
假如有一棵树不是链树,那么可以它的左子树或右子树砍掉使它成为一棵链树,那么这棵链树可以通过生长它没被砍掉的那个子树上的链树,从而得到无数棵原树所不能得到的树(链树)。由于本来就有无数棵树不能被生长得到,现在还有无数棵树不能被生长得到,所以得出这棵树没有任何贡献的结论。
一开始我总是想不通这个结论,还举出了这个反例:
显然这三棵树都不是链树。我们来看看它们共同对应的链树。
看上去,这三棵树似乎可以完全取代他们砍掉一半成为的链树,但其实他们不行。看这最后一棵树,结点4和3是叶子结点,可以生长。这棵树从4和3生长出去的所有树都是前三棵树所不能长出的。有无数棵树(链树)是不能得到的。
综上,可以说任何结构,任何数量的非链树的树,都比不上一颗链树,因为链树有无数颗非链树所不能生长得到的树(链树)。
第二条 先从无限颗树不在 g r o w ( T ) grow(T) grow(T)中推出无限棵链树不在 g r o w ( T ) grow(T) grow(T)中,从无限颗链树不在 g r o w ( T ) grow(T) grow(T)中推出无限棵树不在 g r o w ( T ) grow(T) grow(T)中,总而证明等价关系。
假设无限棵树不在 g r o w ( T ) grow(T) grow(T),把每一棵树 T T T的左或右子树砍掉,或换成一个叶子结点,得出的这棵树 T ’ T’ T’