奶牛健美操(codevs 3279)
题目描述 Description
Farmer John为了保持奶牛们的健康,让可怜的奶牛们不停在牧场之间
的小路上奔跑。这些奶牛的路径集合可以被表示成一个点集和一些连接
两个顶点的双向路,使得每对点之间恰好有一条简单路径。简单的说来,
这些点的布局就是一棵树,且每条边等长,都为1。
对于给定的一个奶牛路径集合,精明的奶牛们会计算出任意点对路径的最大值,
我们称之为这个路径集合的直径。如果直径太大,奶牛们就会拒绝锻炼。
Farmer John把每个点标记为1..V (2 <= V <= 100,000)。为了获得更加短
的直径,他可以选择封锁一些已经存在的道路,这样就可以得到更多的路径集合,
从而减小一些路径集合的直径。
我们从一棵树开始,FJ可以选择封锁S (1 <= S <= V-1)条双向路,从而获得
S+1个路径集合。你要做的是计算出最佳的封锁方案,使得他得到的所有路径集合
直径的最大值尽可能小。
Farmer John告诉你所有V-1条双向道路,每条表述为:顶点A_i (1 <= A_i <= V)
和 B_i (1 <= B_i <= V; A_i!= B_i)连接。
我们来看看如下的例子:
线性的路径集合(7个顶点的树)
1---2---3---4---5---6---7
如果FJ可以封锁两条道路,他可能的选择如下:
1---2 | 3---4 | 5---6---7
这样最长的直径是2,即是最优答案(当然不是唯一的)。
输入描述 Input Description
* 第1行: 两个空格分隔的整数V和S
* 第2...V行: 两个空格分隔的整数A_i和B_i
输出描述 Output Description
* 第1行:一个整数,表示FJ可以获得的最大的直径。
样例输入 Sample Input
7 2
6 7
3 4
6 5
1 2
3 2
4 5
样例输出 Sample Output
2
数据范围及提示 Data Size & Hint
对于50%的数据,满足V<=100;
对于100%的数据,满足V<=100000
/*二分答案+贪心记录以每个节点为根的子树的每条链的长度,如果最长链和次长链的和大于二分出的答案,就减去最长链。 */ #include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #define N 100010 using namespace std; int head[N],f[N],g[N],n,m,sum; struct node {int v,pre; };node e[N*2]; void add(int i,int x,int y) {e[i].v=y;e[i].pre=head[x];head[x]=i; } bool cmp(int s1,int s2) {return s1>s2; } void dfs(int x,int fa,int mid) {for(int i=head[x];i;i=e[i].pre)if(e[i].v!=fa)dfs(e[i].v,x,mid);int cnt=0;for(int i=head[x];i;i=e[i].pre)if(e[i].v!=fa)g[++cnt]=f[e[i].v]+1;sort(g+1,g+cnt+1,cmp);if(cnt==0){f[x]=0;return;}else if(cnt==1){if(g[1]<=mid)f[x]=g[1];else sum++,f[x]=0;return;}else{int i=2;for(;i<=cnt;i++)if(g[i-1]+g[i]<=mid)break;else sum++;if(i==cnt+1&&g[cnt]>mid)sum++;f[x]=g[i-1];return;} } bool check(int mid) {memset(f,0,sizeof(f));memset(g,0,sizeof(g));sum=0;dfs(1,0,mid);if(sum>m)return false;return true; } int main() {scanf("%d%d",&n,&m);for(int i=1;i<n;i++){int x,y;scanf("%d%d",&x,&y);add(i*2-1,x,y);add(i*2,y,x);}int l=0,r=n-1,ans=n-1;while(l<=r){int mid=(l+r)>>1;if(check(mid)){r=mid-1;ans=mid;}else l=mid+1;}printf("%d",ans);return 0; }
转载于:https://www.cnblogs.com/harden/p/6048919.html
奶牛健美操(codevs 3279)相关推荐
- BZOJ——T 2097: [Usaco2010 Dec]Exercise 奶牛健美操
http://www.lydsy.com/JudgeOnline/problem.php?id=2097 Time Limit: 10 Sec Memory Limit: 64 MB Submit: ...
- BZOJ 2097 [Usaco2010 Dec]Exercise 奶牛健美操
[题意] 给出一棵树.现在可以在树中删去m条边,使它变成m+1棵树.要求最小化树的直径的最大值. [题解] 二分答案.$Check$的时候用$DP$,记录当前节点每个儿子的直径$v[i]$,如果$v[ ...
- Codevs 4246 奶牛的身高
Codevs 传送门 题目描述 Description 奶牛们在FJ的养育下茁壮成长.这天,FJ给了奶牛Bessie一个任务,去看看每个奶牛场中若干只奶牛的身高,由于Bessie是只奶牛,无法直接看出 ...
- codevs 2703 奶牛代理商 XII
codevs 2703 奶牛代理商 XII 题目描述 Description 小徐从美国回来后,成为了USACO中国区的奶牛销售代理商,专门出售质优价廉的"FJ"牌奶牛.上题中,小 ...
- [codevs 1298] 凸包周长 [codevs 3201] 奶牛代理商 XI
题解: 今天开始学习计算几何. 这是一道计算几何求凸包周长的模板题,采用Andrew算法. 第二道题改下输出即可. 最后凸包周长的求法注意第一个点和最后一个点是同一个. 代码 100ms 3MB #i ...
- 【codevs 4246】奶牛的身高 差分约束
用差分约束乱搞吧-- 在那次月赛里算个水题了-- 点击就送屠龙宝刀 #include <iostream> #include <cstdio> #include <alg ...
- POJ 3279(Fliptile)题解
以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] 给定长宽的黑白棋棋盘摆满棋子,每次操作可以反转一个位置和其上下左右共五个位置的棋子的颜色,求要使用最少翻转次数将所有棋子反转为黑 ...
- 2021-2027全球与中国奶牛冻精市场现状及未来发展趋势
[报告类型]产业研究 [报告价格]¥4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了全球与中国奶牛冻精行业市场行业相关概述.全 ...
- [ CodeVS冲杯之路 ] P1116
不充钱,你怎么AC? 题目:http://codevs.cn/problem/1116/ 数据很小,DFS可A,每层枚举颜色,判断相邻的点是否有重复的颜色,记得回溯时把颜色染回0,即无颜色 这里我使用 ...
最新文章
- Python基础知识(第四天)
- 前端学习(2610):vuex实现删除
- 我的Mac中毒了,病毒居然叫做MacPerformance
- php的json_encode第二个参数学习及应用
- ArcMAP问题集锦(一)
- dskinlite(uieasy mfc界面库)使用记录4:绘制动态元素(listbox)
- matlab u怎么求均方差,Matlab求方差,均值,均方差,協方差的函數
- 排序算法问题:稳定排序与不稳定排序
- android 平面图app_安卓app设计规范整理和Android APP设计篇
- Gartner2021年网络技术成熟度曲线
- Python解二元一次方程
- Revit中如何绘制轴线?CAD图纸转轴网操作
- N F G结合电商会碰撞怎么样的火花
- Power BI----M函数*
- 王帅:深入PHP内核(二)——SAPI探究
- c语言 什么时候需要malloc动态分配内存?
- PE结构、SEH相关知识学习笔记
- 【计算机操作系统】测试题:动态分区内存分配;调页系统;分页存储管理;快表是什么?计算指令操作数地址;有效存储访问时间,缺页次数,缺页率;
- LittleTools之批量替换工具
- 三路归并排序(附C++和Java代码)
热门文章
- [原创]2014年上半年测试书籍推荐
- 【黑金原创教程】【TimeQuest】【第二章】TimeQuest模型角色,网表概念,时序报告...
- 【转】SQL Server中行列转换 Pivot UnPivot
- C++资源库不完全版本
- vector赋值的常见错误
- java finalize方法的使用
- Linux Socket API Connect 函数详解
- 最大功率点跟踪_ADI公司推出集成最大功率点跟踪和I2C的80V降压升压电池充电控制器...
- c语言三个数从小到大排序/输出_我的c语言笔记(三)
- java.net.noroute,java.net.NoRouteToHostException: No route to host