题目描述

奶牛们建立了电话网络,这个网络可看作为是一棵无根树连接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. security相关链接整理

    token令牌 ssl协议 https协议 对称加密与非对称加密 认识ASP.NET Windows身份认证

  2. DOS文件转换成UNIX文件格式详解

    转:DOS文件转换成UNIX文件格式详解 由windows平台迁移到unix系统下容易引发的问题:Linux执行脚本却提示No such file or directory dos格式文件传输到uni ...

  3. .NET持续集成与自动化部署之路第一篇——半天搭建你的Jenkins持续集成与自动化部署系统

    .NET持续集成与自动化部署之路第一篇(半天搭建你的Jenkins持续集成与自动化部署系统) 前言     相信每一位程序员都经历过深夜加班上线的痛苦!而作为一个加班上线如家常便饭的码农,更是深感其痛 ...

  4. spring cloud服务提供与调用示例

    本文创建方式采用intellij IDEA  创建项目 1.创建基于Eureka的注册中心. 在打开项目中右键,选择new 选择moudle 然后下一步 输入要创建的项目的信息 选择web下面的web ...

  5. Lustre文件系统部署和应用探索

    1. Lustre文件系统概述 2. Lustre文件系统部署 2.1 基本环境 本篇博客将在KVM虚拟机中部署Lustre文件系统. 操作系统版本为CentOS6.5_x86_64.Lustre软件 ...

  6. LVS负载均衡下session共享的实现方式-持久化连接

    之前简单介绍LVS负载均衡的高可用方案实施,下面详细说明LVS的session解决方案: LVS算法中,SH算法可以实现将同一客户端的请求总是发送给第一次指定的RS,除非该RS出现故障不能再提供服务. ...

  7. this.$http.post ||this.$http.put||vue 获取url参

    getClasslist() { this.$http.get('/xxxxx/childlist', { params: { ServiceUnitId: localStorage.getItem( ...

  8. s标签s:if和s:set实现一个表格显示为多个表格

    1.首先本来这个表格是这样的 2.这时候代码是这样的 <table cellpadding="4"> <tr> <th>指标点</th&g ...

  9. svn 使用教程

    一.什么是SVN SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS. 二.SVN的下载安装 下载地址:http ...

  10. PHP使用cookie时遇到的坑

    先看这么一段代码 第一次运行该程序的结果如下图: 然后我刷新了一次,运行结果如下图 你如果不细心,一定没发现,第二次运行的last time的值,正是第一次运行时保存的值. 先看代码,如果$_COOK ...