这道题目真实绝了,这篇随笔主要是对蓝书上面的注释
首先那个结论肯定要知道,然后选取号点作为基准点也是想到了的
那么接下来肯定就是把号点所在连通块当做树根嘛,问题是怎么去分配剩下的点
我最开始想的是像树形背包一样去DP,但是不知道具体有多少子树,然后我又想枚举子树个,但是显然会爆炸
那么这个时候蓝书的操作就惊天地泣鬼神了,直接把这个状态给设置了出来,所以要敢于设置状态
那么就可以推走了
对于,蓝书采用了补集做法,这也告诉我们,对一个数组,可能一部分用正面求另一部分用反面求
然后对于为啥要乘以蓝书上面也解释了。他这个“有根”指的就是从每个连通块选出一个代表点作为这个连通块的根
主要是之前在计算的时候,为啥只用乘以,即使因为这里算的是“有根”的
其实正如蓝书上面所说,这里算“有根”是必要的,因为最开始计算的时候我们还需要知道每个连通块具体有多少个点,这当然是不可能完成的,然而从这道题目可以看出,如果以后我们需要这么干,我们就在计算的时候算成有根的就行了
这道题目的代码还没写,写一下
update 2024.9.13
我们说计数DP两个办法,一个是容斥原理,一个是设出状态递推。这道题目同时涉及两个算法,而且还涉及了方法的嵌套(这里设出就是方法的嵌套)。所以做的过程当中,遇到什么不好直接表示的可以尝试预处理
注意这道题目只能讨论所在的联通分量,不能讨论包含的且包含割边的连通块(也就是在枚举断掉连向所在的联通分量的一条边),这样子会重复计数
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构