cf 701 E

Descrition

给你一颗(nle 2*10^5)个点的树, 有(2*k(2kle n))座大学座落在点上

(任二大学不在同一个点)

求一种两两匹配的方案, 使得距离和最大

即$$maximize{sum_{eachpair(x,y)} dis(x,y)}$$

Solution 1

(1) 化简一下我们相当于要最小化 两两lca的深度和

我们先把这2k所大学按dfn序从小到大排好, 把前k个称为A部分, 后k个称为B部分

(2) 所有匹配均为(A-B)匹配

​ 如果存在一个(A-A')匹配, 那么一定也会存在一个$B-B' $匹配

​ 此时通过交换匹配, 显然一定可以变优

(3) 引理: dfn区间[(x,y)]的公共lca 为 (lca(x,r)) (lca(l,r)), 其中(xle l le rle y)

​ 首先[x,y]的公共lca为点x,点y的lca是显然的

(x o r)相当于走到子树或者向上回溯然后往下走

​ 如果(x-r)路径没有跨过lca, 如图1, 那么r-y就必定会跨过lca

​ 如果(x-r)路径跨国了lca, 如图2, 那么引理成立

(4) 若(x<yin A), 那么(x' < y')

​ 如果存在(x<y<y'<x') , 我们可以交换匹配变成(x-y', y-x'), 解不会变差

(lca(x, x') < one~of~lca(x, y')~and~lca(y, x'))

(lca(y, y') < both~of~lca(x, y')~and~lca(y, x'))

(5) 匹配为(i o i+k)

​ 根据(2) , (1)至少要匹配到(1+k)的位置

​ 根据((4)), 必须要(i o i+k), 才能保证匹配位置足够选择

Solution 2

考虑每条边(fa o x)

(x)子树内有(sub[x])所大学

那么(x)子树外有(2k-sub[x])所大学

结论: 每条边被匹配 (min(sub[x], 2k- sub[x]))

​ 首先, 不可能超过这个次数

​ 然后, 如果小于, 那么子树内部有一对匹配, 子树外部有一对匹配

​ 通过交换匹配一定可以使得距离变长

知道每条边被匹配多少次后, 貌似可以用启发式合并vec的方式构造解

(行吧原题不要求构造解)

原文地址:https://www.cnblogs.com/acha/p/7541855.html