|
|
|
@ -1,3 +1,5 @@
|
|
|
|
|
#### [【前导知识】](https://www.cnblogs.com/littlehb/p/17969449)
|
|
|
|
|
|
|
|
|
|
## 换根$DP$
|
|
|
|
|
|
|
|
|
|
换根$DP$,又叫二次扫描,是树形$DP$的一种。
|
|
|
|
@ -36,9 +38,9 @@
|
|
|
|
|
- ④ 根从$1$号节点变为节点$x$的过程中,我们可以发现第一部分的深度降低了$1$,第二部分的深度则上升了$1$,而这两部分节点的数量在第一次搜索时就得到了。
|
|
|
|
|
|
|
|
|
|
故得到递推公式:
|
|
|
|
|
$$f[v]=f[u]-siz[v]+(siz[1]-siz[v]),fa[v]=u$$
|
|
|
|
|
$$f[v]=f[u]-sz[v]+(sz[1]-sz[v]),fa[v]=u$$
|
|
|
|
|
简化一下就是
|
|
|
|
|
$$f[v]=f[u]+siz[1]-2\times siz[v]=f[u]+n-2\times siz[v]$$
|
|
|
|
|
$$f[v]=f[u]+sz[1]-2\times sz[v]=f[u]+n-2\times sz[v]$$
|
|
|
|
|
|
|
|
|
|
```cpp {.line-numbers}
|
|
|
|
|
#include <bits/stdc++.h>
|
|
|
|
|