“树”的问题

时间:2021-10-03
本文章向大家介绍“树”的问题,主要包括“树”的问题使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

树上竞技 和 下落的小球 两道题都是很不错的树上的问题转换

树上竞技

对于边权和的问题,按套路来,找各个边的贡献即可

首先发现结论,对于一条边的两端,如果一端的人数大于另一端的人数

那么把集合点移向人多的一端肯定更优

设两端的点分别为 \(s\)\(n-s\)

那么该边的贡献为:

\[\sum_{i=1}^{m-1}\binom{s}{i}\binom{n-s}{m-i}+min(i,m-i) \]

按套路来,把 \(min\) 去掉,得

\[\sum_{i=1}^{\frac{m-1}{2}} ( \binom{s}{i}\binom{n-s}{m-i}i+\binom{s}{m-i}\binom{n-s}{i}(m-i) ) +[m\%2=0]\binom{s}{\frac{m}{2}}\binom{n-s}{\frac{m}{2}}\frac{m}{2} \]

第二部分最后特判即可

考虑第一部分如何转移

首先加号两边的式子是等价的,还是套路,为简化式子,把 \(i\) 乘进去:

\[S\sum_{i=1}^{\frac{m-1}{2}}\binom{s-1}{i-1}\binom{n-s}{m-i} \]

令:

\[G(s)=\sum_{i=1}^{\frac{m-1}{2}}\binom{s-1}{i-1}\binom{n-s}{m-i} \]

考虑怎么由 \(G(s)\) 转移到 \(G(s+1)\)

题解很巧妙地用几何意义来转移,可以借鉴学习一下

\(G(s)\) 的几何意义为:(令 \(k=\frac{m-1}{2}\)

\(n-1\) 个物品中选 \(m-1\) 个物品,且前 \(s-1\) 个物品中最多放 \(k-1\) 个的方案数

\(G(s)\) 转移到 \(G(s+1)\) 时,只有前 \(s-1\) 个选了 \(k-1\) 个,且 \(s\) 也被选中的情况不会被算,所以:

\[G(s+1)=G(s)-\binom{s-1}{k-1}*\binom{n-s-1}{m-k-1} \]

综上,一条边的贡献为:

\[G(s)*s+G(n-s)*(n-s)+[m\%2=0]\binom{s}{\frac{m}{2}}\binom{n-s}{\frac{m}{2}}\frac{m}{2} \]

下落的小球

首先考虑无解情况,令 \(b(i)\)\(i\) 子树叶子的操作数之和,\(c(i)\)\(i\) 子树中的小球剩余量,那么恒有 \(b(i)-s(i)>=0\)

对于在该子树内的操作序列,前 \(b(i)-s(i)\) 个操作子树内小球的状态是不变的,后 \(s(i)\) 个操作尽是该子树内的小球状态变化

那么对于一个节点,考虑合并儿子的子树,

首先每个儿子节点一定是先进行各自的前 \(b(j)-s(j)\) 个操作,再进行剩下的操作,且互不影响

那我们可以分别合并前一半操作和后一半操作

那么就可以得到该节点的操作序列方案了

原文地址:https://www.cnblogs.com/zjxlm/p/15365169.html