给定一棵 个节点的树,选出 个特殊点,假设点集为 ,令 为最小的包含这 个节点的连通块,分别求出 在所有情况下的 的和。
Constraints
Solution
考虑暴力,一个点被统计在连通块内,即在以它为根时,选出来的 个点都在它的同一个儿子的子树内。即节点 被统计进答案的次数 为:
令 表示上述公式里有多少个 ,那么可以得到:
整理可得:
令 ,,则可得:
最终答案为 。
Code
1 |
|
Living is do or die.
给定一棵 n 个节点的树,选出 k 个特殊点,假设点集为 S,令 f(S) 为最小的包含这 k 个节点的连通块,分别求出 k=1⋯n 在所有情况下的 f(S) 的和。
2≤n≤200000
考虑暴力,一个点被统计在连通块内,即在以它为根时,选出来的 k 个点都在它的同一个儿子的子树内。即节点 x 被统计进答案的次数 g(x) 为:
g(x)=(kn)−(x,i)⊆E∑(kszi)
令 cntx 表示上述公式里有多少个 szi=x,那么可以得到:
ansk=i=1∑ncnti⋅(ki)
整理可得:
k!⋅ansk=i=1∑n(i−k)!cnti⋅i!
令 ai=cnti⋅i!,bi=(n−i)!,则可得:
k!⋅ansk=i=1∑nai⋅bn−i+k
最终答案为 n⋅(kn)−ansk 。
1 | #include<cstdio> |