zoukankan      html  css  js  c++  java
  • 模拟赛 树上选点 题解

    【题目背景】
    Po 姐姐很爱他的妹子,可是 Po 姐姐并没有妹子。于是 Po 姐姐决定去找妹子。
    【题目描述】
    A 国有 n 个城镇,由 n-1 条道路连接,构成了一个树形结构。每条道路的长度都是一样
    的。
    Po 姐姐最近得到了一个信息:在 A 国的某些城镇,可能出现质量上乘的妹子。
    为了捕获这些妹子, Po 姐姐制作了 m 个传送器,准备将这些传送器安置在一些城镇中。
    一旦某个城镇出现了妹子,Po 姐姐可以立刻传送到某个传送器所在的城镇,然后沿道路移
    动到妹子所在的城镇。Po 姐姐并不愿意走太多的路,因此他会选择离妹子最近的一个传送
    器传送,然后走最短路到达妹子所在的城镇。
    Po 姐姐想要通过合理安排传送器的位置,使得所有妹子可能出现的城镇离最近传送器
    的距离的最大值最小。
    由于 Po 姐姐懒癌发作,请你帮他写一个程序来解决这个问题。Po 姐姐懒得写 SPJ,你
    只需要输出最大距离的最小值就行了。
    【数据输入】
    第一行是两个正整数 n,m,表示 A 国城镇的数量和传送器的数量
    接下来 n 个整数,每个整数都是 1 或 0,如果第 i 个整数是 1 代表第 i 个城镇可能出现
    质量上乘的妹子
    接下来 n-1 行,每行两个正整数 x,y,表示 x 与 y 之间有一条双向通行的道路
    【数据输出】
    输出一行一个正整数,代表所有妹子可能出现的城镇离最近传送器的最大距离的最小值


    题解:
    二分答案,变为判定性问题。

    给定一棵树,有一些点是关键点,要求选择最少的点使得每个关键点到选择的点的距离不
    超过 limit(二分值)。
    然后我们贪心 DFS 一遍
    对于以一个节点为根的子树,有三种状态:
    0.这棵子树中存在一个选择的点,这个选择的点的贡献还能继续向上传递
    1.这棵子树中存在一个未被覆盖的关键点,需要一些选择的点去覆盖他
    2.这棵子树中既没有能继续向上传递的选择的点也不存在未覆盖的关键点
    是不是少了一种状态?如果这棵子树中既存在能继续向上传递的选择的点又存在未被覆盖
    的关键节点呢?
    这种状态可以被归进第二种状态中,因为我们需要一个子树外的节点被选择去覆盖这个未
    覆盖的关键点,那么如果子树内的选择节点还可以覆盖子树外的某个关键节点,那么子
    树外的选择节点一定也可以覆盖这个关键节点,子树内的选择节点的贡献失去了意义,
    因此可以被归为状态 1
    如果是状态 0,记录这个点的贡献还能向上传递多少
    如果是状态 1,记录子树中离根节点最远的未被覆盖的关键点的距离
    然后贪心就行了

    非常重要的思路。

  • 相关阅读:
    shi_tomasi特征点,GFTTDetector
    特征点总结(按features2d.hpp源码由上至下总结)
    经过一年时间的沉淀 再次回首 TCP Socket服务器编程 (二)
    构建嵌入式小型Linux系统
    老赵书托(3):深入理解计算机系统
    #define与typedef区别
    Linux下快速静态编译Qt以及Qt动态/静态版本共存
    tcpdump示例
    linux绑定多个ip(转载)
    Linux下eclipse及mysql安装,c++访问mysql数据库
  • 原文地址:https://www.cnblogs.com/lnzwz/p/11246955.html
Copyright © 2011-2022 走看看