cf 701 E - Connecting Universities
Descrition
给你一颗\(n\le 2*10^5\)个点的树, 有\(2*k(2k\le n)\)座大学座落在点上
(任二大学不在同一个点)
求一种两两匹配的方案, 使得距离和最大
即\[maximize~\{~\sum_{each~pair~(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)\), 其中\(x\le l \le r\le y\)
首先[x,y]的公共lca为点x,点y的lca是显然的
\(x\to r\)相当于走到子树或者向上回溯然后往下走
如果\(x-r\)路径没有跨过lca, 如图1, 那么r-y就必定会跨过lca
如果\(x-r\)路径跨国了lca, 如图2, 那么引理成立
(4) 若\(x<y\in 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\to i+k\)
根据(2) , \(1\)至少要匹配到\(1+k\)的位置
根据\((4)\), 必须要\(i\to i+k\), 才能保证匹配位置足够选择
Solution 2
考虑每条边\(fa\to x\)
记\(x\)子树内有\(sub[x]\)所大学
那么\(x\)子树外有\(2k-sub[x]\)所大学
结论: 每条边被匹配恰 \(min(sub[x], 2k- sub[x])\)次
首先, 不可能超过这个次数
然后, 如果小于, 那么子树内部有一对匹配, 子树外部有一对匹配
通过交换匹配一定可以使得距离变长
知道每条边被匹配多少次后, 貌似可以用启发式合并vec的方式构造解
(行吧原题不要求构造解)
cf 701 E - Connecting Universities的更多相关文章
- codeforces 701 E. Connecting Universities(树+ 边的贡献)
题目链接:http://codeforces.com/contest/701/problem/E 题意:有n个城市构成一棵树,一个城市最多有一个学校,这n个城市一共2*k个学校,要对这2*k个学校进行 ...
- cf 700 B Connecting Universities
题意:现在给以一棵$n$个结点的树,并给你$2k$个结点,现在要求你把这些节点互相配对,使得互相配对的节点之间的距离(路径上经过边的数目)之和最大.数据范围$1 \leq n \leq 200000, ...
- Codeforces Round #364 (Div. 2) E. Connecting Universities
E. Connecting Universities time limit per test 3 seconds memory limit per test 256 megabytes input s ...
- Connecting Universities
Connecting Universities Treeland is a country in which there are n towns connected by n - 1 two-way ...
- Codeforces Round #364 (Div. 2) E. Connecting Universities (DFS)
E. Connecting Universities time limit per test 3 seconds memory limit per test 256 megabytes input s ...
- codeforces 701E E. Connecting Universities(树的重心)
题目链接: E. Connecting Universities time limit per test 3 seconds memory limit per test 256 megabytes i ...
- Codeforces 701E Connecting Universities 贪心
链接 Codeforces 701E Connecting Universities 题意 n个点的树,给你2*K个点,分成K对,使得两两之间的距离和最大 思路 贪心,思路挺巧妙的.首先dfs一遍记录 ...
- Codeforces 700B Connecting Universities - 贪心
Treeland is a country in which there are n towns connected by n - 1 two-way road such that it's poss ...
- cf701E Connecting Universities
Treeland is a country in which there are n towns connected by n - 1 two-way road such that it's poss ...
随机推荐
- 短短几行css代码实现滚动条效果
如何实现使用css实现滚动条效果 实现效果,运用线性渐变来实现功能 假设我们的页面被包裹在 <body> 中,可以滚动的是整个 body,给它添加这样一个从左下到到右上角的线性渐变: bo ...
- 十一、Shell 文件包含
Shell 文件包含 和其他语言一样,Shell 也可以包含外部脚本.这样可以很方便的封装一些公用的代码作为一个独立的文件. Shell 文件包含的语法格式如下: . filename # 注意点号( ...
- java设计模式3--观察者模式
1.初步认识 观察者模式的定义: 在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新. 大白话: 其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了 ...
- php下关于Cannot use a scalar value as an array的解决办法
今天在测试php程序的时候,出现了一个错误提示:Cannot use a scalar value as an array,这个错误提示前几天也出过,当时好像稍微调了一下就好了,也没深究,今天却又出现 ...
- Fakeapp 入门教程(1):安装篇!
在众多AI换脸软件中Fakeapp是流传最广,操作最简单的一款,当然他同样也是源于Deepfakes. 这款软件在设计上确实是花了一些心事,只要稍加点拨,哪怕是再小白的人也能学会.下面我就做一个入门教 ...
- Redis学习笔记(三)
一.数据备份与恢复 数据备份: localhost:> save OK 该命令会在redis的安装目录中创建文件dump.rdb,并把数据保存在该文件中 查看redis的安装目录: localh ...
- GoF23种设计模式之创建型模式之建造者模式
一.概述 将一个复杂对象的构建与其表示分离开来,使得同样的构建过程可以创建不同的表示. 二.适用性 1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式的时候. 2.当构造过程必须允许 ...
- Farm Tour POJ - 2135 (最小费用流)
When FJ's friends visit him on the farm, he likes to show them around. His farm comprises N (1 <= ...
- B1056 组合数的和 (15分)
B1056 组合数的和 (15分) 给定 N 个非 0 的个位数字,用其中任意 2 个数字都可以组合成 1 个 2 位的数字.要求所有可能组合出来的 2 位数字的和.例如给定2.5.8,则可以组合出: ...
- Postgres安装详解
PG安装 一.基础包的安装(yum源的配置,可以采用光盘挂载,及ftp yum源,针对外网环境忽略此步): yum -y install wget tcpdump glibc libgcc gcc g ...