博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ1785[USACO 2010 Jan Gold 3.Cow Telephones]——贪心
阅读量:6080 次
发布时间:2019-06-20

本文共 1544 字,大约阅读时间需要 5 分钟。

题目描述

奶牛们建立了电话网络,这个网络可看作为是一棵无根树连接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
#include
#include
#include
#include
#include
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

转载于:https://www.cnblogs.com/Khada-Jhin/p/9132760.html

你可能感兴趣的文章
静态文件所需
查看>>
一篇文章全面了解监控知识体系
查看>>
部署mongodb做replica set分布式
查看>>
linux如何查看文件夹大小
查看>>
关键字 输入效果和样式
查看>>
用Js的eval解析JSON中的注意点
查看>>
玩转树莓派——升级NOOBS离线安装介质到Raspbian 4.9和Windows 10 IoT C
查看>>
php使用GD库合并简单图片并变动部分颜色
查看>>
【用jersey构建REST服务】系列文章
查看>>
ElasticSearch最新权威指南中文翻译版!
查看>>
java jdk简单解析
查看>>
ARM 曝光32位 1mm x 1mm CPU
查看>>
QNX Neutrino OS 6.5 SP1发布
查看>>
原型以及原型链
查看>>
王利芬 2011
查看>>
疯狂Spring Cloud连载(9)——RestTemplate的负载均衡原理
查看>>
疯狂Spring Cloud连载(27)Apache Kafka框架
查看>>
Hadoop2.4.1伪分布式的搭建
查看>>
https方式使用TortoiseGit设置git@osc密码长期存储
查看>>
由于多个切面pointcut重叠造成的事务的问题。
查看>>