3 条题解
-
0
怄火。
考虑一下题目条件是在说什么,这个连通性很自然的导向了点双。建出圆方树,那么集合对 是好的当且仅当 的方点邻居或 自己在 的虚树上。
如果我们把 确定下来,那么 的数量必然是 。那么计数的过程中主要维护的对象就应该是 。
对每个集合 ,我们钦定在 虚树的根结点处计数这个集合的贡献。设 表示所有以 为根的虚树的 对应的集合对个数之和。
再令 表示 子树中,在所有 中额外添加一个 ( 到“原本 对应的虚树”的路径,也是虚树的一部分)时,所有 对应的集合对个数之和。
对于方点,我们有转移
$$f_u=2^{s_u-1}\left(\prod_{v\in \operatorname{son}(u)}(1+g_v)-1-\sum_{v\in\operatorname{son}(u)}g_v\right) $$其中 为方点 对应的点双大小。因为钦定了 是虚树的根,那就必须选 个子树。如果选了 个子树,那么任何一个方点 的儿子(圆点)都可以被包含在集合 之中。
不要在这里抉择每个儿子 是否在 里,这里已经在儿子处决择过了。
$$g_u=\left(2^{s_u-1}\sum_{v\in \operatorname{son}(u)}g_v\right)+f_u $$同理,因为到 的路径也是虚树的一部分,方点 的所有儿子(圆点)也可以被包含在 中,所以要乘上 ,最后再加上 。
对于圆点 我们有转移。
$$f_u=\left(\prod_{v\in \operatorname{son}(u)}(1+g_v)-1-\sum_{v\in\operatorname{son}(u)}g_v\right)+\prod_{v\in \operatorname{son}(u)}(1+g_v) $$如果点 不在 中,那么至少要有两个儿子被选择,才能在虚树上。否则无论如何就都是可行的。
$$g_u=\left(\sum_{v\in \operatorname{son}(u)}g_v\right)+f_u $$这个比较显然。
答案就是:
这里乘 是因为,如果 是方点,我们没有决策其父亲是否在 中,如果 是圆点,我们没有决策自己是否在 中。最后加上两者都为空的 。
其中 是圆方树点数。
信息
- ID
- 4
- 时间
- 3000ms
- 内存
- 1024MiB
- 难度
- 7
- 标签
- 递交数
- 139
- 已通过
- 25
- 上传者