• CF1529E


    两棵树分别记为 S,K

    lemma:

    1. 一个团一定位于S的一条链上

      proof:显然

    2. 考虑K树dfs序,任何节点的dfs序区间之间只有包含或不相交的关系(本身的dfs序和子树中最大的dfs序组成的区间)

      proof:显然

    3. 考虑K树dfs序,则x是y的祖先的充分必要条件是x子树的dfs序区间包含y子树的dfs序区间

      proof:显然

    4. 在加入新点时如果可行贪心选择,如果不可行保留不是祖先的点,删除另一个点。

      按此方法有最优子结构且答案单调不递减(对于新点每次至多只有一个是它的祖先,或它的儿子)

      proof:由lemma2,3,可以得到贪心选择不是祖先的点一定要优于选择是祖先的点。按此方法,如果某刻加入一个点后有三个点矛盾了,那么在加入三个点中的第二个点时就会删掉前两个矛盾的点中的一个,即每次处理完后所有点互相都不矛盾(所有点的dfs序区间不相交)。

    Solution:

    ​ 首先记录K树每个节点dfs序区间

    ​ 然后dfs遍历S树,dfs遍历过的点始终是一条链(遍历到叶子会回溯),此时lemma1满足。

    ​ 考虑现在遍历到点y,按照lemma4考虑是否加入点y

    ​ 每次记录最大值

    ​ 到叶子节点回溯

    ​ 具体实现可以考虑支持区间修改单点查询的数据结构,记录当前被选择的区间的节点编号,查询该点是否被选择,如果被选择的话编号是多少,需要保留谁,然后就是 区间修改了。

  • 相关阅读:
    [CQOI2017] 小Q的棋盘
    CF75D Big Maximum Sum
    Dockerfile
    docker镜像与容器的导出导入
    ubuntu安装glusterFS
    常用工具网站网址
    国内数据分析平台
    清理系统垃圾
    sql注入笔记
    shopify Liquid语言学习知识点总结
  • 原文地址:https://www.cnblogs.com/ullio/p/14825655.html
Copyright © 2020-2023  润新知