分析:
考场上看都没看的题。。。但实现起来居然异常简单(相对于隔壁D题动态点分治而言)。。。。
这题除了利用了仙人掌图的定义。。其它都和仙人掌没关系。。。
先考虑一个相对简单的问题:
如果给的是棵树,怎么求答案?
树的性质无非就是两点间路径唯一,也就是说,这里的“最大流”可以看作两点间路径上的边权最小值。
从大到小加入边。每次加入时,因为两端点所在的联通块中,这条边边权一定是最小的(比它边权小的边都还没加入)。那么这两个联通块之间的路径最小值一定可以在当前这条边上取到。所以就可以算出这条边对最终答案的贡献。
由于题目非常鬼畜地要异或点的编号,所以这里求贡献还是需要一点技巧:
用并查集维护每个点所在的联通块中,编号在二进制下第 k k 位为0、为1的点的数量,设为 和 sumk1 s u m k 1 。
我们可以按边权在二进制下的每一位,分别求贡献。
若边权二进制下第 i i 位为1,那么就要求两个点的编号在第