BZOJ——T 2097: [Usaco2010 Dec]Exercise 奶牛健美操
http://www.lydsy.com/JudgeOnline/problem.php?id=2097
Time Limit: 10 Sec Memory Limit: 64 MB
Submit: 417 Solved: 213
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
6 7
3 4
6 5
1 2
3 2
4 5
Sample Output
2
HINT
Source
Gold
二分最小的直径
验证时,统计出每个节点所在链的长度,如果比当前ans大,就砍去、
1 #include <algorithm> 2 #include <cstring> 3 #include <cstdio> 4 5 #define min(a,b) (a<b?a:b) 6 inline void read(int &x) 7 { 8 x=0; register char ch=getchar(); 9 for(; ch>'9'||ch<'0'; ) ch=getchar(); 10 for(; ch>='0'&&ch<='9'; ch=getchar()) x=x*10+ch-'0'; 11 } 12 13 const int N(1e5+5); 14 int n,p,u,v,s,t; 15 int head[N],sumedge; 16 struct Edge { 17 int v,next; 18 Edge(int v=0,int next=0):v(v),next(next){} 19 }edge[N<<1]; 20 inline void ins(int u,int v) 21 { 22 edge[++sumedge]=Edge(v,head[u]); 23 head[u]=sumedge; 24 edge[++sumedge]=Edge(u,head[v]); 25 head[v]=sumedge; 26 } 27 28 int l,r,mid,ans,tmp,cnt,td[N],dis[N]; 29 void DFS(int u,int fa,int num) 30 { 31 dis[u]=0; 32 for(int i=head[u]; i; i=edge[i].next) 33 if(edge[i].v!=fa) DFS(edge[i].v,u,num); 34 cnt=0; 35 for(int i=head[u]; i; i=edge[i].next) 36 if(edge[i].v!=fa) td[++cnt]=dis[edge[i].v]+1; 37 std::sort(td+1,td+cnt+1); 38 for(; cnt&&td[cnt]+td[cnt-1]>num; ) cnt--,tmp++; 39 dis[u]=td[cnt]; 40 } 41 bool check(int x) 42 { 43 tmp=0; DFS(1,0,x); 44 return tmp<=p; 45 } 46 47 int Presist() 48 { 49 // freopen("longnosee.in","r",stdin); 50 // freopen("longnosee.out","w",stdout); 51 52 read(n); read(p); 53 for(int u,v,i=1; i<n; ++i) 54 read(u),read(v),ins(u,v); 55 for(l=1,r=n; l<=r; ) 56 { 57 mid=l+r>>1; 58 if(check(mid)) 59 { 60 ans=mid; 61 r=mid-1; 62 } 63 else l=mid+1; 64 } 65 printf("%d\n",ans); 66 return 0; 67 } 68 69 int Aptal=Presist(); 70 int main(){;}
转载于:https://www.cnblogs.com/Shy-key/p/7552943.html
BZOJ——T 2097: [Usaco2010 Dec]Exercise 奶牛健美操相关推荐
- BZOJ 2097 [Usaco2010 Dec]Exercise 奶牛健美操
[题意] 给出一棵树.现在可以在树中删去m条边,使它变成m+1棵树.要求最小化树的直径的最大值. [题解] 二分答案.$Check$的时候用$DP$,记录当前节点每个儿子的直径$v[i]$,如果$v[ ...
- 【BZOJ】2099: [Usaco2010 Dec]Letter 恐吓信
[题意]给定长度为n和m的两个字符串S和T,要求在字符串S中取出若干段拼成T(可重复取),求最小段数,n,m<=50000. [算法]后缀自动机 || 后缀数组 [题解]对串S建SAM,然后在上 ...
- BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会 树形DP
[Usaco2010 Mar]gather 奶牛大集会 Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会.当然,她会选择最方便的地点来举办这次集会.每个奶牛居住在 N(1 ...
- [Usaco2010 Mar]gather 奶牛大集会
1827: [Usaco2010 Mar]gather 奶牛大集会 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 1129 Solved: 525 [ ...
- bzoj2101【Usaco2010 Dec】Treasure Chest 藏宝箱
2101: [Usaco2010 Dec]Treasure Chest 藏宝箱 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 418 Solved: ...
- BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会 树形DP + 带权重心
Description Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会.当然,她会选择最方便的地点来举办这次集会.每个奶牛居住在 N(1<=N<=100,0 ...
- BZOJ 1779. [Usaco2010 Hol]Cowwar 奶牛战争
传送门 考虑构建网络流模型 把一个流量看成一只奶牛的攻击过程,那么答案就是最大流 因为每只奶牛只能操作一波,所以构造分层图,一层相当于一步 第一层就是初始状态,从 $S$ 向所有 $J$ 奶牛连一条流 ...
- 【BZOJ】1690: [Usaco2007 Dec]奶牛的旅行(分数规划+spfa)
http://www.lydsy.com/JudgeOnline/problem.php?id=1690 第一题不是水题的题.. 分数规划.. T-T 百度吧..http://blog.csdn.ne ...
- bzoj 1827: [Usaco2010 Mar]gather 奶牛大集会【树形dp】
不能用read会TLE!!不能用read会TLE!!不能用read会TLE!! 一开始以为要维护每个点,线段树写了好长(还T了-- 首先dfs一遍,求出点1为集会地点的答案,处理处val[u]为以1为 ...
最新文章
- java c++的区别_Java语言与C、C++之间的区别?
- vForum 2008系列之七:主题演讲:虚拟化的未来
- LinkedList插入元素一定比ArrayList快吗
- 程序设计方法的发展历程
- fpga运算服务器_一张图了解CPU、GPU、ASIC、FPGA性能、功耗效率、灵活性
- JDBC的批处理操作三种方式
- 单片机r6/r7c语言怎么用,关于单片机C51中c语言函数(-nop-())?
- 用英语用计算机造句,英语造句用It’s adj (for sb) to do sth 造句10个
- window 2008 搭建的DHCP服务器
- 计算机硬件只能做维修吗,关于计算机硬件维修的研究
- RxJava -- 从 create 开始 (一)
- 8.找出链表环的入口结点
- python数据驱动读取用例_【webdriver自动化】Python数据驱动工具DDT(示例代码)
- log4j2远程执行漏洞原理以及解决方案
- oracle commit_log,Oracle log file sync 等待事件 与 COMMIT_WAIT,COMMIT_LOGGING 参数说明
- 机器学习理论基础学习18---高斯过程回归(GPR)
- 超好用的ACM刷题网站,你用过几个?
- WordPress网站底部设置网站已运行时间
- CSS基础知识---三种选择器
- 组策略——软件限制策略(完全教程与规则示例)