给定一棵树,每次询问$k_i$个点,询问最少需要截断多少个点,可以使得这些点两两联通。
$\sum k_i \leq 10^5$
显然是虚树,然后考虑如何$dp$。
首先特胖一下是否有相邻的两个点。
$f[x]$为以$x$为根的子树的答案.
$g[x]$为此时有没有关键点直连到 $x$ 的父亲,即把$x$去掉。
- 如果$x$不是关键点,并且旗下关键点$>1$,那么显然可以$f[x]=\sum dp[y]+1$,把自己去了并且$g[x]=0$
- 如果是关键点,子树里有顶部存在关键点去掉中间的点,$dp[x]=\sum (g[x] +dp[y])$,
- 如果$x$不是关键点,并且旗下关键点$g[x]=1$,无所谓,那么显然可以$f[x]=\sum dp[y]$,$g[x]=(g[x]=1)$
代码
1 |
|