基环树DP
Page1:问题
啥是基环树?就是在一棵树上增加一条边。
Page2:基环树的几种情况
无向
有向:基环外向树,基环内向树。
Page3:处理问题的基本方式
1.断环成树
2.分别处理树和环,之后就是考环形DP了。
Page4:如何找无向基环树的环?
无向图直接找环
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化版