码迷,mamicode.com
首页 > 其他好文 > 详细

【ZJOI2017】仙人掌

时间:2019-08-29 15:59:22      阅读:80      评论:0      收藏:0      [点我收藏+]

标签:rod   题解   方案   问题   没有   难点   覆盖   problem   解决方法   

题面

https://www.luogu.org/problem/P3687

题解

如果原图不是仙人掌(在这里,我们认为一棵树也是一个仙人掌),则无解,输出$0$。

如果原图是一个仙人掌,加的边是不能跨越仙人掌上的环边的(若跨越,则仙人掌上的环边被$2$个环所有,不是仙人掌),所以我们直接把环边断掉,变成一个森林,直接统计每棵树的答案,最后乘法原理乘起来就可以了。

首先,很自然的想到,令$F[i]$表示$i$节点的子树及它的父边形成一个仙人掌的方案数(父边可选可不选),这个状态不同寻常,一般我们的状态都是不带父边的。但是这道题不一样,稍微分析一下就可以得到这个状态。(这个应该不是难点吧)

如果是按寻常的方法转移,这个状态是有问题的,因为要考虑儿子之间可能还有边,我的解决方法是分父边一定被覆盖和父边一定没有被覆盖两个状态讨论,这样只能做到$O(\sum{deg^2})$。

题解很神奇,先预处理出一个数组$h[i]$,表示有$i$个点,他们之间互相匹配的方案数,显然,分$i$不配对还是和别人配对,有$h[i]=h[i-1]+(i-1)h[i-2]$(吐槽:我觉得这个数组只是处理出了特殊情况,如果一个点$x$,对于它的每个儿子$y$都有$f[y]=1$,是可以这么转移的,但是$f[y]$可以是任意值,就假了啊),然后是一个神奇的结论(特殊情况得到一般结论?)有$$f[x]=\prod_{(x,y) \in E}{f[y]} \times g[deg[x]]$$,看了题解之后,我的脑子里也预想过这个结论,但是不会证明(大概是乘法原理对应每一种情况吧),不管了,既然结论这么好记,我就记下了行吧。

 

【ZJOI2017】仙人掌

标签:rod   题解   方案   问题   没有   难点   覆盖   problem   解决方法   

原文地址:https://www.cnblogs.com/shxnb666/p/11429135.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!