题目链接:http://codeforces.com/contest/701/problem/E

题意:有n个城市构成一棵树,一个城市最多有一个学校,这n个城市一共2*k个学校,要对这2*k个学校进行连边,使得所有连出来的边的和最大,每条边边权为1.

题解:这题有一个巧妙的解法,可以记录一下每一条边的贡献(所谓贡献就是有多少对点连线会经过这条边)

也就是记录一下这条边左端点以左的所有需要连的点x和右端点的数目就是2*k-x。然后边的贡献就是两者取

最小。这样dfs一遍所有的边就行了。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
using namespace std;
typedef long long ll;
const int M = 2e5 + 10;
bool Is[M];
vector<int>vc[M];
ll ans , son[M];
int n , k , x;
void dfs(int pos , int pre) {int len = vc[pos].size();if(Is[pos]) son[pos] = 1;for(int i = 0 ; i < len ; i++) {int v = vc[pos][i];if(v != pre) {dfs(v , pos);son[pos] += son[v];}}ans += min(son[pos] , 2 * k - son[pos]);
}
int main() {scanf("%d%d" , &n , &k);for(int i = 1 ; i <= 2 * k ; i++) {scanf("%d" , &x);Is[x] = true;}int u , v;for(int i = 1 ; i < n ; i++) {scanf("%d%d" , &u , &v);vc[u].push_back(v);vc[v].push_back(u);}ans = 0;memset(son , 0 , sizeof(son));dfs(1 , -1);printf("%I64d\n" , ans);return 0;
}

转载于:https://www.cnblogs.com/TnT2333333/p/6831878.html

codeforces 701 E. Connecting Universities(树+ 边的贡献)相关推荐

  1. codeforces 700B Connecting Universities

    题意: 给你一棵树,边权均为1,上面有2K个点为学校 让你将学校配对,配对的学校需要修路连接 问修的路最长为多少 思路: 每条边计算最大价值 即这条边两端学校中较小的那个数量 因为最大利用这条边就要把 ...

  2. Codeforces 833B 题解(DP+线段树)

    题面 传送门:http://codeforces.com/problemset/problem/833/B B. The Bakery time limit per test2.5 seconds m ...

  3. Codeforces 997E Good Subsegments (线段树)

    题目链接 https://codeforces.com/contest/997/problem/E 题解 经典题,鸽了 159 天终于看明白题解了.. 考虑一个区间是连续的等价于这个区间内的 \((\ ...

  4. CodeForces - 888G Xor-MST(贪心+字典树+最小生成树)

    题目链接:点击查看 题目大意:给出 nnn 个点,任意两个点之间的边权为 ai⊕aja_i\oplus a_jai​⊕aj​,求最小生成树 题目分析:去年多校写过一样的模型,再拿出来写一遍回顾一下:牛 ...

  5. CodeForces - 1553F Pairwise Modulo(数论+树状数组)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,求 pk=∑1≤i,j≤kaimodajp_k = \sum_{1 \le i, j \le k} a_i \bmod a_jpk​=∑1 ...

  6. CodeForces - 1476E Pattern Matching(字典树+拓扑)

    题目链接:点击查看 题目大意:给出 nnn 个模式串和 mmm 个匹配串,题目要求输出一种模式串的排列方式,使得 mmm 个模式串从头开始匹配的话,可以匹配到相应的模式串 模式串的长度不超过 444, ...

  7. CodeForces - 1539F Strange Array(线段树区间合并)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,规定位置 iii 的贡献是:设 x=a[i]x=a[i]x=a[i],选择一个包含 iii 的区间 [l,r][l,r][l,r],将其中 ...

  8. CodeForces - 1430E String Reversal(线段树+模拟)

    题目链接:点击查看 题目大意:给出一个字符串 sss ,令其反转的串为 ttt ,每次操作可以将 ttt 中的两个相邻位置的字符交换,问最少需要进行多少次操作才能使得 ttt 变成 sss 题目分析: ...

  9. CodeForces - 1422F Boring Queries(主席树+线段树/RMQ)

    题目链接:点击查看 题目大意:给出 n 个数组成的数组 a ,再给出 m 次询问,每次询问需要回答区间 [ l , r ] 中所有元素的最小公倍数,强制在线 题目分析:首先考虑多个数的最小公倍数该如何 ...

最新文章

  1. Tianchi发布完整开源数据集!
  2. HyperPocket:生成点云网络
  3. 机器学习 二分类分类阈值_分类指标和阈值介绍
  4. .gitignore和.gitkeep有什么区别?
  5. 中国计算机学会CCF推荐国际学术会议和期刊目录(PDF版,2015年)
  6. maven 添加本地库
  7. python温度转换代码_用python编写一个名为“convert_temp”的温度转换函数
  8. url主机域名可以省略_接口自动化测试(三):关于URL
  9. 为何现在好多饭店熬汤不用骨头也能熬出来浓白色的汤?
  10. macOS Big Sur无法识别USB外置驱动器怎么办
  11. 高德地图 API 搜索服务 搜索定位 用不了
  12. javascript电子书下载
  13. 人工智能基础 | Python实现-产生式系统-文字动物识别系统
  14. 第073封“情书”:小目标20181022Using UV Layout ForGeometryPacking<Entagma>Houdini 2018
  15. 后缀–ize_常见词性后缀
  16. 微信公众号开发之(42)curl 图书查询
  17. linux 配置回指路由,不配置回指路由多网段网络如何互联?
  18. 用卷积神经网络(CNN)识别文字
  19. 算法-回溯backtrack
  20. finebi-数据更新与定时发邮件

热门文章

  1. 输出节点位移_绝对值信号的编码器有哪些信号输出(一、二)
  2. springboot jwt token前后端分离_「转」七个开源的 Spring Boot 前后端分离项目,建议收藏加转载...
  3. 为什么写C语言弹不出窗口,居然还有SB说C写不出窗口的..
  4. html页面加载完成后会触发的事件_前端隐秘角落 - 页面渲染
  5. C/C++深入剖析指针机制与内存动态管理
  6. 30 校准_校准or质控,傻傻分不清楚
  7. android 冰箱 活动,Android活动的使用
  8. java prototype是什么,java设计模式-原型模式(Prototype)
  9. linux 命令 ppt,Linux基本命令()讲解.ppt
  10. a4988 脉宽要求_Allegro MicroSystems - A4988: 带转换器和过流保护的 DMOS 微步驱动器