题目描述

奶牛们建立了电话网络,这个网络可看作为是一棵无根树连接n(1 n 100,000)个节点,节点编号为1 .. n。每个节点可能是(电话交换机,或者电话机)。每条电话线连接两个节点。第i条电话线连接两个节点Ai和Bi(1 Ai,Bi n; Ai Bi)。 叶子节点只连接一条电话线,这些叶子节点是位于电话网中的一个电话亭。两头奶牛需要通话,信号是沿着电话网络中连接两个顶点之间最短的路径传递。每部交换机最多可容纳K (1 K 10)对牛同时通话,对于输入的无根树,求出在任何一个时间最多可同时对话奶牛的对数。 下面是6个节点的电话网络(无根树):  在叶子节点1,3,5和6中有四头奶牛,如果奶牛1和奶牛3,奶牛5和奶牛6通话,那么同时通话的最大数目是2(2对奶牛同时通话)。

输入

第1行: 用空格分开的两个整数:n和k。 第2..n+1行: 第i+1行用空格分开的两个整数,Ai和Bi。

输出

仅1行: 一个整数表示可同时对话奶牛的对数。

样例输入

6 1
1 2
2 3
2 4
4 5
4 6

样例输出

2
 
题目大意就是每个非叶子节点有一个容量限制,每两个叶子节点配对要占用这两个点路径上所有点1容量且每个叶子节点只能被匹配一次,问最多能匹配多少对。这个题显然是贪心,对于每个叶子节点,要尽量找近的叶子节点匹配(即两个节点lca最深的)。那么对于每棵由叶子节点和它们父节点组成的子树(二阶树)进行匹配,有两种情况:
1、在子树内就能把所有叶子匹配完,或容量不足以匹配完这棵子树中所有的叶子。这种情况就意味着这棵子树匹配完了,不会再和别的子树匹配。
2、把这棵子树内匹配完还剩叶子没匹配且父节点还有容量。这种情况可以给这棵子树的根节点(即上述父节点)打上标记表示这棵子树有节点需要被匹配。
这样每次二阶树匹配完之后把剩下没匹配但能匹配的点再和相对较近的点匹配,就能得到最大匹配数。
最后附上代码。
#include<queue>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,k;
int x,y;
int ans;
int tot;
int g[100010];
int v[100010];
int to[200010];
int vis[100010];
int head[100010];
int next[200010];
void add(int x,int y)
{
tot++;
next[tot]=head[x];
head[x]=tot;
to[tot]=y;
}
void dfs(int x,int fa)
{
if(vis[x]==1)
{
g[x]=1;
if(x!=1)
{
return ;
}
}
for(int i=head[x];i;i=next[i])
{
if(to[i]!=fa)
{
dfs(to[i],x);
if(g[to[i]]==1)
{
if(g[x]==1)
{
v[x]++;
g[x]=0;
}
else if(v[x]!=k)
{
g[x]=1;
}
}
}
}
ans+=v[x];
}
int main()
{
scanf("%d%d",&n,&k);
for(int i=1;i<n;i++)
{
scanf("%d%d",&x,&y);
add(x,y);
add(y,x);
vis[x]++;
vis[y]++;
}
dfs(1,0);
printf("%d",ans);
}

BZOJ1785[USACO 2010 Jan Gold 3.Cow Telephones]——贪心的更多相关文章

  1. BZOJ1915[USACO 2010 Open Gold 1.Cow Hopscotch]——DP+斜率优化

    题目描述 奶牛们正在回味童年,玩一个类似跳格子的游戏,在这个游戏里,奶牛们在草地上画了一行N个格子,(3 <=N <= 250,000),编号为1..N.就像任何一个好游戏一样,这样的跳格 ...

  2. BZOJ1828[USACO 2010 Mar Gold 2.Barn Allocation]——贪心+线段树

    题目描述 输入 第1行:两个用空格隔开的整数:N和M * 第2行到N+1行:第i+1行表示一个整数C_i * 第N+2到N+M+1行: 第i+N+1行表示2个整数 A_i和B_i 输出 * 第一行: ...

  3. [USACO 2018 Jan Gold] Tutorial

    Link: USACO 2018 Jan Gold 传送门 A: 对于不同的$k$,发现限制就是小于$k$的边不能走 那么此时的答案就是由大于等于$k$的边形成的图中$v$所在的连通块除去$v$的大小 ...

  4. bzoj2581 [USACO 2012 Jan Gold] Cow Run【And-Or Tree】

    传送门1:http://www.usaco.org/index.php?page=viewproblem2&cpid=110 传送门2:http://www.lydsy.com/JudgeOn ...

  5. BZOJ1827[USACO 2010 Mar Gold 1.Great Cow Gathering]——树形DP

    题目描述 Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会.当然,她会选择最方便的地点来举办这次集会.每个奶牛居住在 N(1<=N<=100,000) 个农场 ...

  6. bzoj258 [USACO 2012 Jan Gold] Bovine Alliance【巧妙】

    传送门1:http://www.usaco.org/index.php?page=viewproblem2&cpid=111 传送门2:http://www.lydsy.com/JudgeOn ...

  7. Usaco 2010 Dec Gold Exercise(奶牛健美操)

    /*codevs 3279 二分+dfs贪心检验 堆版本 re一个 爆栈了*/ #include<cstdio> #include<queue> #include<cst ...

  8. bzoj3939 【USACO 2015 FEB GOLD 】cow hopscotch

    Description 就像人类喜欢玩"跳房子"的游戏,农民约翰的奶牛已经发明了该游戏的一个变种自己玩.由于笨拙的动物体重近一吨打,牛跳房子几乎总是以灾难告终,但这是没有阻止奶牛几 ...

  9. BZOJ1782[USACO 2010 Feb Gold 3.Slowing down]——dfs+treap

    题目描述 每天Farmer John的N头奶牛(1 <= N <= 100000,编号1…N)从粮仓走向他的自己的牧场.牧场构成了一棵树,粮仓在1号牧场.恰好有N-1条道路直接连接着牧场, ...

随机推荐

  1. java 学习------JDK1.8安装与配置

    1.下在JDK 1.8 2.解压安装 (一般选择默认路径安装) 3.配置环境变量     (我的电脑是windows10 系统) (1)计算机→属性→高级系统设置→高级→环境变量 (2)添加 JAVA ...

  2. Android Canvas saveLayerAlpha使用

    Canvas.saveLayerAlpha(float left, float top, float right, float bottom, int alpha, int saveFlags): 本 ...

  3. linux调度器源码分析 - 运行(四)

    本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 引言 之前的文章已经将调度器的数据结构.初始化.加入进程都进行了分析,这篇文章将主要说明调度器是如何在程序稳定运 ...

  4. Maven学习笔记-04-Eclipse下maven项目在Tomcat7和Jetty6中部署调试

    现在最新的Eclipse Luna Release 已经内置了Maven插件,这让我们的工作简洁了不少,只要把项目直接导入就可以,不用考虑插件什么的问题,但是导入之后的项目既可以部署在Tomcat也可 ...

  5. 解决Oracle登录极慢的问题

    原文首发 http://anforen.com/wp/2018/04/oracle_login_slowly/ Oracle用PL/SQL登录,特别慢,3分钟以上,如果以前正常,并且按常见问题排查过, ...

  6. odoo 订餐系统之消息提醒

    打算入手odoo开发新的系统,先研究下开发的过程是如何的.案例模仿自带的订餐系统,此系统模块不多,但很典型,可以达到联系的目的.先记录下订餐系统消息提醒的开发过程. 1.添加自己的addons目录my ...

  7. es5中for...in 和es6中 for..of遍历

    //定义一个数组 var arr=['A','B','C']; //定义一个对象 var obj={name:'张三',age:20} // for..in 遍历数组 得到索引 for(var x i ...

  8. [Entity Framework+MVC复习总结1]-WebForm与Asp.Net MVC

    一.Web开发方式的比较 二.web Form开发模型 WebForm开发优点: 1.支持事件模型开发.得益于丰富的服务器端组件,webfrom开发可以迅速的搭建web应用 2.使用方便,入门容易 3 ...

  9. shell+curl监控网站页面(域名访问状态),并利用sendemail发送邮件

    应领导要求,对公司几个主要站点的域名访问情况进行监控.下面分享一个监控脚本,并利用sendemail进行邮件发送. 监控脚本如下:下面是写了一个多线程的网站状态检测脚本,直接从文件中读出站点地址,然后 ...

  10. PHP从入门到精通(五)

    字符串三种声明方式 1."":双引号中可以解析变量"{$a}",双引号中可以使用任何转义字符:2.'':单引号中不可以解析变量,单引号中不可以使用转义字符(但是 ...