zoukankan      html  css  js  c++  java
  • 基环树DP

    基环树DP

    Page1:问题

    啥是基环树?就是在一棵树上增加一条边。

    Page2:基环树的几种情况

    无向
    有向:基环外向树,基环内向树。

    Page3:处理问题的基本方式

    1.断环成树
    2.分别处理树和环,之后就是考环形DP了。

    Page4:如何找无向基环树的环?

    无向图直接找环
    Alt text

    Page5:基环内向树

    首先它是一个有向图,它构成类似基环树的结构,有一个特点是每个点
    都有且只有一个出度,并且环外的节点方向指向环内
    如果题目说满足每一个点都有一个唯一出度,则本质上就是给了我们一个 基环内向树森林(不只是一个基环内向树!!!!)
    性质: 任何一个点沿着唯一出边走都会走到环上
    利用这个性质可以随便选一个点直接循环找到。(或者直接用无向图找环,反正也不难写。)

    Page6:基环外向树

    与基环内向树相反,它有且只有一个入度(基环内向树是出度),并且
    并且由环指向环外。
    可以把所有边反向后,变成基环内向树快速找环。

    Page 7:BZOJ1040 骑士

    N个人,每个人都有一个战斗力和一个讨厌的人(不是他本身),要求一
    个总战斗力最大的人的集合,满足集合内部两两不互相讨厌
    N<=10^5

    Page8:Solution

    把这个讨厌关系的图画出来,就是个基环内向树森林,然后我们要求最
    大权独立集。
    求最大独立集内向和外向和无向图毫无区别,都是相邻的不能选。
    这里的基环树上有且仅有一个环,就是从任意环上一条边(u,v)断开环,分
    两种情况,一种是选u,不选v,一种是选v,不选u,两种情况取最大值。
    转化成树的话,就是那个简单的树形dp。
    找环dfs找就好,或者从一个点顺着父亲一直走直到走到一个曾经走到过
    的点就找到一个环了。

    Page 9:IOI2008 牛逼题luo化版

    求无向基环森林中的每棵基环树的直径之和。边有边权
    定义两个点的距离为两个点的最短路。
    直径的定义是最长的两个点的距离
    点数n<=1000
    题源:BZOJ1791luo化版

  • 相关阅读:
    毕业设计每日博客——第八周4
    毕业设计每日博客——第八周3
    毕业设计每日博客——第八周2
    毕业设计每日博客——第八周1
    毕业设计每日博客——第七周5
    毕业设计每日博客——第七周4
    毕业设计每日博客——第七周3
    毕业设计每日博客——第七周2
    毕业设计每日博客——第七周1
    毕业设计每日博客——第六周5
  • 原文地址:https://www.cnblogs.com/gaozhuoyuan/p/11794213.html
Copyright © 2011-2022 走看看