题意
给定一颗带权树,求一个排列(P),最大化
[sum_{i=1}^{n-1}maxflow(P_i, P_{i+1})
]
其中(maxflow(x,y))为点(x)到点(y)之间的最大流
解法
结论题
这个最大值就是所有边权的和,即所有情况中最优的一种
证明这个解是所有解中最优的:
- 考虑最小的边连接的两个子树
- 最优的(P)一定只经过改变一次(如果经过多次,最小的边就会替换掉一个比它更大的边,使答案更劣)
- 递归的考虑两边的子树,发现只有当每条边都作为某条瓶颈边时,答案最优
考虑如何构造一个排列(P),使得上式能够满足
我们能发现点(x)到点(y)的最大流就是(x)到(y)路径上的边权最小值
那么首先我们找到树上最小的边(E(l,r))
设被(E)分开的两个连通块的大小分别为(S_l,S_r)
那么我们在(P[S_l])处填(l),(P[S_l+1])处填(r)
再对两边的子树进行分治,重复执行上述操作,最后就能构造出合法的一个(P)了
代码
没什么特别需要注意的,就不放了