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的更多相关文章

  1. codeforces 701 E. Connecting Universities(树+ 边的贡献)

    题目链接:http://codeforces.com/contest/701/problem/E 题意:有n个城市构成一棵树,一个城市最多有一个学校,这n个城市一共2*k个学校,要对这2*k个学校进行 ...

  2. cf 700 B Connecting Universities

    题意:现在给以一棵$n$个结点的树,并给你$2k$个结点,现在要求你把这些节点互相配对,使得互相配对的节点之间的距离(路径上经过边的数目)之和最大.数据范围$1 \leq n \leq 200000, ...

  3. 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 ...

  4. Connecting Universities

    Connecting Universities Treeland is a country in which there are n towns connected by n - 1 two-way ...

  5. 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 ...

  6. codeforces 701E E. Connecting Universities(树的重心)

    题目链接: E. Connecting Universities time limit per test 3 seconds memory limit per test 256 megabytes i ...

  7. Codeforces 701E Connecting Universities 贪心

    链接 Codeforces 701E Connecting Universities 题意 n个点的树,给你2*K个点,分成K对,使得两两之间的距离和最大 思路 贪心,思路挺巧妙的.首先dfs一遍记录 ...

  8. 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 ...

  9. 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 ...

随机推荐

  1. Android驱动开发5-7总结

    Android深度探索5-7章总结 介绍了S3C6410开发板的功能,开发板的不同主要是在烧录嵌入式系统的方式不同,以及如何在此开发板上安装Android.紧接着学到介绍到如何在多种平台,使用多种方式 ...

  2. 对比传统方式访问数据库和SpringData访问数据库

    我们在写代码的时候应该一边写一边测试,这样的话可以尽快的找到错误,在代码写多了之后去找错误的话不容易给错误定位 传统方式访问数据库 1:创建一个Maven web项目 2:修改pom.xml为以下内容 ...

  3. Centos7之Nginx

    1.安装 下载RPM: wget http://nginx.org/download/nginx-1.16.0.tar.gz 解压:tar -zxf nginx-1.16.0.tar.gz 安装: c ...

  4. vue.js 四(指令和自定义指令)

    官方的指令说明已经很简单了,这里再写一遍,也是自己加深一下印象 v-text 就是写入单纯的文本,可以忽略这个指令直接双花括号代替 <span v-text="msg"> ...

  5. ThinkPHP函数I代码优化

    ThinkPHP/Common/common.php 文件 I函数,主要用来获取一些gpc请求的变量的,函数有一部分代码是过滤变量的,每次都运行一次,其实是没有必要的. 如果你每次都像这样的方式调用的 ...

  6. 高并发架构系列:如何从0到1设计一个类Dubbo的RPC框架

    在过去持续分享的几十期阿里Java面试题中,几乎每次都会问到Dubbo相关问题,比如:“如何从0到1设计一个Dubbo的RPC框架”,这个问题主要考察以下几个方面: 你对RPC框架的底层原理掌握程度. ...

  7. DFS:BZOJ1085-骑士精神

    题目: 1085: [SCOI2005]骑士精神 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1461  Solved: 796 [Submit][ ...

  8. Leetcode 106. 从中序与后序遍历序列构造二叉树

    题目链接 https://leetcode.com/problems/construct-binary-tree-from-inorder-and-postorder-traversal/descri ...

  9. redis配置密码 redis常用命令

    redis配置密码 1.通过配置文件进行配置yum方式安装的redis配置文件通常在/etc/redis.conf中,打开配置文件找到 [plain] view plain copy   #requi ...

  10. mysql-不恰当的update语句使用主键和索引导致mysql死锁

    背景知识:MySQL有三种锁的级别:页级.表级.行级. MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking):BDB存储引擎采用的是页面锁(page-level ...