生活在hzoi上 题解
生活在hzoi上 题解
考虑有两棵树怎么做,显然是
发现上边那个
因此有
考虑枚举连通块形态,也就是枚举重合的边,首先让边重合,之后任意连边使得连通块联通,这样就能构造出第二棵树,但是任意连边的时候会连上一些和第一条重合的边,导致连通块形态变化,这显然会算重
但是我们不会其他做法,把这个写出来,等等或许就有办法把算重的除去
贡献是
右边
然后我们只要考虑怎么使用容斥或者什么其他玩意把多出来那部分搞掉就好了
jijidawang 做法
考虑这个东西实际上算了每个状态多少次,对于每个子状态,也就是从当前枚举的连通块里切断一些边,都会额外以错误的贡献算一遍当前状态,加上本来的一次贡献,所以是
左边
整理一下,发现有个二项式定理展开形式,给它收回去,然后发现里面那个二项式系数没了
也就是说当输入的那玩意是 y 的时候,上面那个算法算出来的是
然而我们要求的是
假设现在我们能够对任意变量
左边
发现我们构造一个合适的
把
好了,现在设
答案就是
dp
现在我们都有了计算答案的式子,只需要算出来
如果枚举连通块个数的话是
这貌似是一个经典 trick,考虑这个式子相当于在每个连通块里面找一个点,将点权作为整个连通块的权值,之后整棵树的权值等于所有连通块权值的乘积
设状态
注意
依次写出上面几项的含义:
是和下面没选贡献节点的子树连到一起,所以选了自己 是和当前子树连到一起,在子树内就选好贡献 是不和当前子树连到一起,自己和子树都选好了贡献 是和当前子树连一起 是断开这条边
这样我们就能在
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】