题解 P6776 【[NOI2020]超现实树】
(摘自 NOI 2020 翻盘记)
本人赛时 AC,但是没拷代码,先写一下解法,有空补代码,填补一下题解的空白。
讲题主要讲了合并的思路,但是我用的是分治的思路。
观察
证明非常简单,因为任何一棵树
观察
证明:非不能长出好树,所以它对长出好树没有任何帮助,根据观察
这告诉我们,如果只保留有效的树,那么对于每一个结点,向下递归不可能同时递归左右子树,因为至少有一个是大小不超过
因此递归可以考虑,设
-
根只有左儿子;
-
根只有右儿子;
-
根有左右儿子且左儿子大小为
1 ; -
根有左右儿子且右儿子大小为
1 ;
(3.4 可能有唯一交集,但问题不大)
对于
对于
如果四种情况全部几乎完备,则原树林几乎完备;特殊地,如果
考虑证明上面断言的正确性:
所有可能的好树仅有上面四种,并且分别可以利用上面说的四种情况的树生成,所以只要四种树都分别几乎完备,则原树林几乎完备;反之如果有一种树不几乎完备,那么就可以构造无穷多的反例。
由于每个树最多被递归深度次,根据讲课时讲师的分析,在卡满情况下深度仅能到达