题目大意:给一棵树,书上有一些关键节点,要求你选m个点,使得关键节点到这些点中距离的最小值的最大值最小,求这个值
先二分答案,转成判定性问题
考虑我们已经知道覆盖范围了,那么我们就要用最少的点来覆盖整个树
这一步用贪心就可以了,从下往上,直到必须放一个点的时候才放
为什么是对的呢?
我们考虑在一个不是必须放的地方放置了一个点,这样他们对于子树下面的影响是一样的,都是全部能覆盖
但是在下面放相对于在上面放来说,向上的延伸更少,所以贪心是对的
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 300010
using namespace std;
bool spc[N];
int to[N<<1],nxt[N<<1],pre[N],cnt;
void ae(int ff,int tt)
{cnt++;to[cnt]=tt;nxt[cnt]=pre[ff];pre[ff]=cnt;
}
int L,tot;
int n,m;
int t[N];
int fa[N],f[N];
void dfs(int x)
{int i,j;int tmp1=-707185547,tmp2=-707185547;if(spc[x]) tmp1=0;for(i=pre[x];i;i=nxt[i]){j=to[i];if(j==fa[x]) continue;fa[j]=x;dfs(j);if(t[j]==1) tmp1=max(tmp1,f[j]+1);if(t[j]==2) tmp2=max(tmp2,f[j]-1);}if(tmp1>tmp2){if(tmp1==L){tot++;t[x]=2;f[x]=L;}else{t[x]=1;f[x]=tmp1;}}else{t[x]=2;f[x]=tmp2;}
}
bool judge(int x)
{L=x;tot=0;dfs(1);if(t[1]==1&&f[1]>=0) tot++;return (tot<=m);
}
int main()
{scanf("%d%d",&n,&m);int i,j,x,y;for(i=1;i<=n;i++)scanf("%d",&spc[i]);for(i=1;i<n;i++){scanf("%d%d",&x,&y);ae(x,y);ae(y,x);}int l=0,r=n,mid;while(l<r){mid=(l+r)>>1;if(judge(mid)) r=mid;else l=mid+1;}printf("%d",l);
}

BZOJ2525: [Poi2011]Dynamite相关推荐

  1. BZOJ2525 [Poi2011]Dynamite 【二分 + 贪心】

    题目链接 BZOJ2525 题解 就是要求所有有炸弹的点到点燃点距离最大值最小 显然二分答案距离\(D\) 然后按深度排序,贪心点燃当前没覆盖的深度最深的点往上第\(D\)层的点 每覆盖一个点要标记其 ...

  2. [bzoj2527][Poi2011]Meteors_整体二分_树状数组

    Meteors bzoj-2527 Poi-2011 题目大意:题目链接. 注释:略. 想法: 首先答案可以离线,且具有单调性. 这里的单调性就是随着时间的推移,每个国家收集的陨石数增加. 不难想到整 ...

  3. [bzoj2213][Poi2011]Difference_动态规划

    Difference bzoj-2213 Poi-2011 题目大意:已知一个长度为n的由小写字母组成的字符串,求其中连续的一段,满足该段中出现最多的字母出现的个数减去该段中出现最少的字母出现的个数最 ...

  4. 洛谷 P3521 [POI2011]ROT-Tree Rotations 解题报告

    P3521 [POI2011]ROT-Tree Rotations 题意:递归给出给一棵\(n(1≤n≤200000)\)个叶子的二叉树,可以交换每个点的左右子树,要求前序遍历叶子的逆序对最少. 大体 ...

  5. bzoj 2216: [Poi2011]Lightning Conductor(DP决策单调性)

    2216: [Poi2011]Lightning Conductor Time Limit: 25 Sec  Memory Limit: 64 MB Submit: 1292  Solved: 443 ...

  6. luogu P3527 [POI2011]MET-Meteors

    luogu P3527 [POI2011]MET-Meteors 大意 就是给你一个长度为m的环,环上每个点属于一个国家,一共有n个国家,每次会有陨石掉落在环上的一段点上,每个国家都想要收集一定的陨石 ...

  7. [洛谷P3527] [POI2011]MET-Meteors

    洛谷题目链接:[POI2011]MET-Meteors 题意翻译 Byteotian Interstellar Union有N个成员国.现在它发现了一颗新的星球,这颗星球的轨道被分为M份(第M份和第1 ...

  8. 「POI2011 R1」Conspiracy

    「POI2011 R1」Conspiracy 解题思路 : 问题转化为,将点集分成两部分,其中一部分恰好组成一个团,其中另一部分恰好组成一个独立集. 观察发现,如果求出了一个解,那么答案最多可以在这个 ...

  9. # bzoj2215: [Poi2011]Conspiracy 2-sat

    bzoj2215: [Poi2011]Conspiracy 2-sat 链接 https://www.lydsy.com/JudgeOnline/problem.php?id=2215 思路 一个点的 ...

  10. 【LG3527】[POI2011]MET-Meteors

    [LG3527][POI2011]MET-Meteors 题面 洛谷 题解 整体二分. 每次二分\(mid\),如果到时间\(mid\)以收集过\(P_i\)就存入子序列\(L\),否则存入子序列\( ...

最新文章

  1. 简单介绍ASP中Cache技术的应用
  2. Android build.gradle(app)介绍
  3. 富人和穷人的八大差异
  4. XML编程(CRUD)
  5. 逐点比较法直线插补MATLAB
  6. 计算机安全常用防护策略,新手必看
  7. hdu3987(最小割最小边数)
  8. 公有云时代企业需要什么样的云平台
  9. 全栈工程师需要了解掌握的技术栈
  10. 腾讯云服务器漏洞怎么修复,腾讯云安全中心监测到微软披露的99个漏洞,win系统云服务器用户尽快修复...
  11. 组织机构树数据库表设计
  12. RGB,ARGB颜色值的表示表示
  13. 【汇正财经】企业资本的意义
  14. 【算法】剑指offer-删除链表中重复的节点最小栈
  15. 2013c语言二级等级考试试题,计算机等级考试二级c语言考试试题
  16. PHP 日期转换为时间戳 strtotime 与 mktime 函数
  17. 【树莓派】USB摄像头默认和指定使用设备
  18. 2018-2019-2 网络对抗技术 20165230 Exp4 恶意代码分析
  19. 从暗黑III的拍卖行探讨 - 为什么真正所有权并不会拯救你的游戏
  20. 中继器、集线器、网桥、交换机、路由器功能与比较

热门文章

  1. MATLAB过期破解方法
  2. 统计学习方法——概述
  3. unity下载教育版_新的现场学习系列为Unity教育工作者提供支持
  4. 微信公众号--H5商城在线客服的解决方案:使用微信公众号的对话能力插件实现在线客服沟通
  5. 70 行 Python 代码写春联,支持行书隶书楷书!
  6. idea 代码格式化 Spotless 教程
  7. 判断平面内两直线平行c语言,5.2 平行线及其判定教学设计模板
  8. 平面直角坐标系中的旋转公式_【初中数学大招流】从平面几何到解析几何
  9. LabVIEW升级图像识别功能
  10. 发抖音上热门最佳时间 视频MD5修改器苹果手机