codeforces 701 E. Connecting Universities(树+ 边的贡献)
题目链接: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(树+ 边的贡献)相关推荐
- codeforces 700B Connecting Universities
题意: 给你一棵树,边权均为1,上面有2K个点为学校 让你将学校配对,配对的学校需要修路连接 问修的路最长为多少 思路: 每条边计算最大价值 即这条边两端学校中较小的那个数量 因为最大利用这条边就要把 ...
- Codeforces 833B 题解(DP+线段树)
题面 传送门:http://codeforces.com/problemset/problem/833/B B. The Bakery time limit per test2.5 seconds m ...
- Codeforces 997E Good Subsegments (线段树)
题目链接 https://codeforces.com/contest/997/problem/E 题解 经典题,鸽了 159 天终于看明白题解了.. 考虑一个区间是连续的等价于这个区间内的 \((\ ...
- CodeForces - 888G Xor-MST(贪心+字典树+最小生成树)
题目链接:点击查看 题目大意:给出 nnn 个点,任意两个点之间的边权为 ai⊕aja_i\oplus a_jai⊕aj,求最小生成树 题目分析:去年多校写过一样的模型,再拿出来写一遍回顾一下:牛 ...
- CodeForces - 1553F Pairwise Modulo(数论+树状数组)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,求 pk=∑1≤i,j≤kaimodajp_k = \sum_{1 \le i, j \le k} a_i \bmod a_jpk=∑1 ...
- CodeForces - 1476E Pattern Matching(字典树+拓扑)
题目链接:点击查看 题目大意:给出 nnn 个模式串和 mmm 个匹配串,题目要求输出一种模式串的排列方式,使得 mmm 个模式串从头开始匹配的话,可以匹配到相应的模式串 模式串的长度不超过 444, ...
- CodeForces - 1539F Strange Array(线段树区间合并)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,规定位置 iii 的贡献是:设 x=a[i]x=a[i]x=a[i],选择一个包含 iii 的区间 [l,r][l,r][l,r],将其中 ...
- CodeForces - 1430E String Reversal(线段树+模拟)
题目链接:点击查看 题目大意:给出一个字符串 sss ,令其反转的串为 ttt ,每次操作可以将 ttt 中的两个相邻位置的字符交换,问最少需要进行多少次操作才能使得 ttt 变成 sss 题目分析: ...
- CodeForces - 1422F Boring Queries(主席树+线段树/RMQ)
题目链接:点击查看 题目大意:给出 n 个数组成的数组 a ,再给出 m 次询问,每次询问需要回答区间 [ l , r ] 中所有元素的最小公倍数,强制在线 题目分析:首先考虑多个数的最小公倍数该如何 ...
最新文章
- Tianchi发布完整开源数据集!
- HyperPocket:生成点云网络
- 机器学习 二分类分类阈值_分类指标和阈值介绍
- .gitignore和.gitkeep有什么区别?
- 中国计算机学会CCF推荐国际学术会议和期刊目录(PDF版,2015年)
- maven 添加本地库
- python温度转换代码_用python编写一个名为“convert_temp”的温度转换函数
- url主机域名可以省略_接口自动化测试(三):关于URL
- 为何现在好多饭店熬汤不用骨头也能熬出来浓白色的汤?
- macOS Big Sur无法识别USB外置驱动器怎么办
- 高德地图 API 搜索服务 搜索定位 用不了
- javascript电子书下载
- 人工智能基础 | Python实现-产生式系统-文字动物识别系统
- 第073封“情书”:小目标20181022Using UV Layout ForGeometryPacking<Entagma>Houdini 2018
- 后缀–ize_常见词性后缀
- 微信公众号开发之(42)curl 图书查询
- linux 配置回指路由,不配置回指路由多网段网络如何互联?
- 用卷积神经网络(CNN)识别文字
- 算法-回溯backtrack
- finebi-数据更新与定时发邮件
热门文章
- 输出节点位移_绝对值信号的编码器有哪些信号输出(一、二)
- springboot jwt token前后端分离_「转」七个开源的 Spring Boot 前后端分离项目,建议收藏加转载...
- 为什么写C语言弹不出窗口,居然还有SB说C写不出窗口的..
- html页面加载完成后会触发的事件_前端隐秘角落 - 页面渲染
- C/C++深入剖析指针机制与内存动态管理
- 30 校准_校准or质控,傻傻分不清楚
- android 冰箱 活动,Android活动的使用
- java prototype是什么,java设计模式-原型模式(Prototype)
- linux 命令 ppt,Linux基本命令()讲解.ppt
- a4988 脉宽要求_Allegro MicroSystems - A4988: 带转换器和过流保护的 DMOS 微步驱动器