题目大意

在n颗结点的树上有2k个需要配对的点,把他们两两配对,使得路程和最大并输出

选取一个点v

lv表示v与父亲的边

那么考虑lv被经过的次数,对于一个最大的情况,lv应该为min(sv, 2*k - sv) ,其中sv是v子树中需要配对的点(包括v)

假如lv比这个值小,那么必定有a和b在v的子树外,c和d在子树内,它们分别配对

但是如果这样的话,让a和c配对,b和d配对,显然更优

所以lv只能等于min(sv, 2*k - sv)

最后输出所有点的这个值的和即可

#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
long long sz[222222], ans;
vector <int> G[222222];
void dfs(int x, int fa)
{for(int i = 0; i < G[x].size(); i++){int to = G[x][i];if(to == fa) continue;dfs(to, x);sz[x] += sz[to];}
}
int n, k, x, y;
int main()
{cin>>n>>k;for(int i = 1; i <= 2*k; i++) cin>>x, sz[x]++;for(int i = 1; i < n; i++){cin>>x>>y;G[x].push_back(y);G[y].push_back(x);}dfs(1, 1);for(int i = 2; i <= n; i++) ans += min(sz[i], 2*k - sz[i]);cout<<ans<<endl;
}

转载于:https://www.cnblogs.com/Saurus/p/6227293.html

Codeforces Round #364 (Div. 1) 700B(树)相关推荐

  1. Codeforces Round #364 (Div. 1) (差一个后缀自动机)

    B. Connecting Universities 大意: 给定树, 给定2*k个点, 求将2*k个点两两匹配, 每个匹配的贡献为两点的距离, 求贡献最大值 单独考虑每条边$(u,v)$的贡献即可, ...

  2. 【推导】Codeforces Round #364 (Div. 2) D. As Fast As Possible

    一种方法是二分总时间,复杂度O(nlogn). 另外我们可以证明,当所有人同时到达终点的时候,是最优的,因为没有人的时间"浪费"了. 我们又发现,每个人的运动过程总是两段,要么是走 ...

  3. Codeforces Round #364 (Div. 2)C. They Are Everywhere(尺取法)

    题目链接: C. They Are Everywhere time limit per test 2 seconds memory limit per test 256 megabytes input ...

  4. Codeforces Round #740 (Div. 2) F. Top-Notch Insertions 线段树 / 平衡树 + 组合数学

    传送门 文章目录 题意: 思路: 题意: 思路: 考虑最终的序列是什么鸭子的,首先序列肯定单调不降,也就是a1≤a2≤a3≤...≤ana_1\le a_2\le a_3\le ...\le a_na ...

  5. Codeforces Round #453 (Div. 1) D. Weighting a Tree 构造 + dfs树

    传送门 文章目录 题意: 思路: 题意: 给你一颗nnn个点的图,每个点都有一个点权cic_ici​,要求你给每个边赋一个权值kik_iki​,要求对于每个点与他相连的边的权值之和等于这个点的点权ci ...

  6. Codeforces Round #675 (Div. 2) F. Boring Queries 区间lcm + 主席树

    传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn的序列aaa,qqq个询问,每次询问[l,r][l,r][l,r]内的lcmlcmlcm是多少,对1e9+71e9+71e9+7取模. n ...

  7. Codeforces Round #737 (Div. 2) D. Ezzat and Grid 线段树动态开点

    传送门 文章目录 题意: 思路: 题意: 思路: 比较套路的一个题,我们维护一个dp[i]dp[i]dp[i]表示到了第iii行能保留的区间最多是多少. 转移比较明显:dp[i]=max(dp[j]) ...

  8. Codeforces Round #723 (Div. 2) D. Kill Anton 线段树 + 暴力

    传送门 文章目录 题意: 思路: 题意: 给你一个只有ANTOANTOANTO四个字母的字符串,你每次可以交换相邻两个,花费为111,让后让你打乱字符串,使得将打乱的字符串还原为原来的字符串的花费最小 ...

  9. Codeforces Round #628 (Div. 2) F. Ehab‘s Last Theorem dfs树

    传送门 文章目录 题意: 思路: 题意: 给你个nnn个点mmm条边的图,可以选择完成以下两个任务中的一个: (1)(1)(1)找出大小恰好为n\sqrt nn​的一个独立集. (2)(2)(2)找出 ...

  10. Codeforces Round #620 (Div. 2) F2. Animal Observation (hard version) dp + 线段树

    传送门 文章目录 题意: 思路: 题意: 比如下面这个图: 思路: 对于这个题,比较容易就能考虑到dpdpdp,设f[i][j]f[i][j]f[i][j]为到了第iii行,覆盖了[j,j+k−1][ ...

最新文章

  1. Android 编译源码 注意事项
  2. Nginx访问日志、日志切割、静态文件不记录日志和过期时间
  3. Java报异常时getMessage()方法返回null
  4. python使用符号 表示单行注释-Pyhton 单行、多行注释符号使用方法及规范
  5. split函数python 未定义_Python之Split函数
  6. win10删除开机密码_新版WIN10 如何取消开机密码的操作
  7. zz bond配置网络: 两个网卡一个ip
  8. ReportViewer中设置ServerReport.ReportServerCredentials属性的方法(WEB版)
  9. springboot redis token_Spring Boot+Redis 扛住,瞬间千次重复提交(实例)
  10. 安卓倒计时 listview默认选中一项
  11. 使用hierarchyid查询分层数据
  12. 女人活到后半生才会明白:兜里有钱,才有安全感
  13. 支付宝出征世界杯!白岩松:“中国除了足球队没去,其他都去了”
  14. linux hotplug 机制,佐须之男的博客- 跟着佐大学Lede/OpenWrt开发入门培训班讲义-18 OpenWrt hotplug 机制分析...
  15. cpu测试稳定性软件,测试CPU稳定性工具Prime95
  16. 可以在linux下运行的u盘制作工具,U盘Linux制作工具LiveUSB Creator下载
  17. Fisher精确检验【转载】
  18. 大数据高薪职位必备:Hadoop求职者的6大攻略
  19. Android背景设置透明和半透明效果
  20. Ubuntu18.04将QT应用设计为开机自启

热门文章

  1. SharePoint Framework 企业向导(二)
  2. centos下编译安装Openssl
  3. 关于一个类中方法的调用
  4. appserv+win8
  5. sqlite配置下载安装教程
  6. React-Native 在 mac 下 build 问题
  7. windows全部启动项
  8. 设计模式(4)----抽象工厂模式
  9. uva 1328(kmp)
  10. HDU 1596 find the safest road