Atcoder abc290
https://atcoder.jp/contests/abc290/tasks
G - Edge Elimination
perfect k(>=2)叉树,深度D(根深度=0)
问最少剪掉多少边,存在一个点数为X的连通分量
数据足数 t <= 100
原树点树 <= 1e18
2s
1024mb
我的思路
如果 选定连通分量 再剪断边
那么 显然连通分量的所有点有唯一lca,那么如果这个lca不是根的化,只需要在lca的父向边剪断
而对于指定了根以后,剩余的全是从指定根向叶子向的连通路径
因此每次剪断边相当于减去 1+k+k2+… = (k^?-1)/(k-1)
注意到 点<=1e18
log2(1e18) = 59.794705707972525, 即 D <= 60
所以对于指定根来说 可以枚举根在哪一层
x = (k^{d+1}-1)/(k-1) - a1(k1-1)/(k-1) - a2(k2-1)/(k-1) - a3(k3-1)/(k-1) -…
min(a1+a2+a3+..)
然后注意到 不同层的点的剪断次数之间还有限制关系,所以 这像是一线性规划?
一个方向是考虑 k = 2时,就是二叉树
每次都是减去 2^d-1
1 | 1110101011011110 |
想要从高到低 贪心(数位dp?)但证明不了??
但这样至少是可行解不一定是最优解