题目大意

给定2k个队伍分别住在2k个城市里,需要设定若干个城市,然后选取2个队伍要在它们的最短路径上设一个城市作为休息站

要求设立最少的休息站,然后输出如何安排2个队伍

首先若干个其实就是在坑人,实际上1个就可以了

这一个点就是树的权值重心。

权值重心的定义:若选取权值重心为根,则它的任意子树的权值和不会大于所有子树权值和的二分之一

那么接下来证明权值重心是可行的

只需要构造出来一组分组即可

我是这么构造的

先搜每一个子树,搜集齐k个点放到A,然后继续搜集剩下的点放到B,如果权值重心上也有队伍,那么就把它加到B

然后依次输出A[i],B[i]即可

这样做是可行的,因为任意子树的权值和不会大于所有子树权值和的二分之一。(稍微想想就可以知道啦)

#include <iostream>
#include <vector>
#include <queue>
using namespace std;
const int maxn = ;
vector<int> G[maxn];
queue<int> Q[];
int f[maxn], v[maxn], sz[maxn], son[maxn];
int n, k, x, y, X; void dfs(int x, int fa)
{
for(int i = ; i < G[x].size(); i++)
{
int to = G[x][i];
if(fa == to) continue;
dfs(to, x);
sz[x] += sz[to];
son[x] = max(son[x], sz[to]);
}
son[x] = max(son[x], *k - sz[x]);
} void dfs2(int x, int fa, int c)
{
if(!f[x] && Q[c-].size() < k && v[x])
{
f[x] = c;
Q[c-].push(x);
}
for(int i = ; i < G[x].size(); i++)
{
int to = G[x][i];
if(fa == to) continue;
dfs2(to, x, c);
}
} int main()
{
cin>>n>>k;
for(int i = ; i < n; i++)
{
cin>>x>>y;
G[x].push_back(y);
G[y].push_back(x);
}
for(int i = ; i <= *k; i++) cin>>x, sz[x] = v[x] = ;
dfs(, );
for(int i = ; i <= n; i++)
if(son[i] <= k) X = i;
cout<<<<endl<<X<<endl;
for(int i = ; i < G[X].size(); i++)
{
if(Q[].size() < k)
dfs2(G[X][i], X, );
if(Q[].size() == k)
dfs2(G[X][i], X, );
}
if(Q[].size() == k-) Q[].push(X);
while(!Q[].empty())
{
cout<<Q[].front()<<" "<<Q[].front()<<" "<<X<<endl;
Q[].pop(); Q[].pop();
}
}

Codeforces Round #389 (Div. 2) 752F(树的权值重心)的更多相关文章

  1. Codeforces Round #389(div 2)

    A =w= B QvQ C 题意:在一个格子图里给出一个路径 里面有UDLR四种移动方向 问 我在格子路径里面最少选几个点 可以让我沿着格子路径走 其实是在相邻的点与点之间走最短路 分析:贪心+模拟 ...

  2. Codeforces Round #389 Div.2 D. Santa Claus and a Palindrome

    time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...

  3. Codeforces Round #365 (Div. 2) D 树状数组+离线处理

    D. Mishka and Interesting sum time limit per test 3.5 seconds memory limit per test 256 megabytes in ...

  4. Codeforces Round #261 (Div. 2) D 树状数组应用

    看着题意:[1,i]中等于a[i]的个数要大于[,jn]中等于a[j]的个数 且i<j,求有多少对这种(i,j)  ,i<j可是 i前面的合法个数 要大于j后面的 看起来非常像逆序数的样子 ...

  5. Codeforces Round #218 (Div. 2) (线段树区间处理)

    A,B大水题,不过B题逗比了题意没理解清楚,讲的太不清楚了感觉= =还是英语弱,白白错了两发. C: 二分答案判断是否可行,也逗比了下...二分的上界开太大导致爆long long了...   D: ...

  6. Codeforces Round #425 (Div. 2) D 树链剖分 + 树状数组维护区间

    一看就知道 可以LCA判断做 也可以树链剖分拿头暴力 然而快速读入和线段树维护区间会T70 于是只能LCA? 线段树的常数不小 于是需要另外一种办法来进行区间加减和查询区间和 就是使用树状数组 这个题 ...

  7. Codeforces Round #389 (Div. 2,) B C

    考完复变之后沉迷联盟不能自拔...明天就开始抢救计组 ... B 一个人装错了键帽 选择几个pair 把pair里面的键帽交换 并且每个键帽最多可以换一次 给出按键序列和输出序列 判断是否可以 如果可 ...

  8. Codeforces Round #389 (Div. 2, Rated, Based on Technocup 2017 - Elimination Round 3) C

    Description Santa Claus has Robot which lives on the infinite grid and can move along its lines. He ...

  9. Codeforces Round #389 (Div. 2, Rated, Based on Technocup 2017 - Elimination Round 3) B

    Description Santa Claus decided to disassemble his keyboard to clean it. After he returned all the k ...

随机推荐

  1. iOS 检测版本更新(02)

    iOS 检测版本更新 如果我们要检测app版本的更新,那么我们必须获取当前运行app版本的版本信息和appstore 上发布的最新版本的信息. 当前运行版本信息可以通过info.plist文件中的bu ...

  2. 总结ing

    1,iOS的GCD中如何关闭或者杀死一个还没执行完的后台线程? 举例来说,我通过导航进入到了一个视图,这个视图加载的时候会新建一个线程在后台运行,假设这个线程需要从网络中读取许多数据,需要一定的时间, ...

  3. 通过tomcat配置访问本机资源

    背景:在最近的项目中使用海康威视的摄像机,在项目预算中没有购买对应的硬盘录像机,但是由于客户需要能够进行视频的回放功能,所以直接采用了海康提供的视频管理客户端直接进行视频录像,然后保存在本机进行播放. ...

  4. 51nod 1298 圆与三角形——计算几何

    题目链接:http://www.51nod.com/Challenge/Problem.html#!#problemId=1298 转化成判断三条线段和圆是否

  5. GUI测试问题汇总

    1.ajax实现的页面元素定位问题 最近在做项目的时候遇到一个问题,通过xpath定位到元素后做一个循环操作,第一循环可以正常执行,第二次循环后就报错,错误信息:Message: The elemen ...

  6. BAT及各大互联网公司2014前端笔试面试题

    很多面试题是我自己面试BAT亲身经历碰到的.整理分享出来希望更多的前端er共同进步吧,不仅适用于求职者,对于巩固复习前端基础更是大有裨益. 而更多的题目是我一路以来收集的,也有往年的,答案不确保一定正 ...

  7. MUI常用脚本及原生JavaScript常用操作元素方法

    1.mui元素转换html元素 var obj=mui("#id")[0]; 2.事件绑定 var btn = document.getElementById("logi ...

  8. Visual Stutio 2015激活密钥

    Visual Stutio 2015 专业版激活密钥:HMGNV-WCYXV-X7G9W-YCX63-B98R2 Visual Stutio 2015 企业版激活密钥:HM6NR-QXX7C-DFW2 ...

  9. PHP.TP框架下商品项目的优化1-时间插件、鼠标所在行高亮、布局规划页面

    1.优化搜索表单中按时间搜索的功能 添加一个时间插件datetimepicker,在lst.html中,注意要导入jquery.min.js,此处从前文的在线编辑器中导入 <!-- 导入 --& ...

  10. SpringBoot推荐基础包

    技术交流群:233513714 Spring Boot 推荐的基础包 名称 说明 spring-boot-starter 核心 POM,包含自动配置支持.日志库和对 YAML 配置文件的支持. spr ...