前言:近期在复习这些东西,就xjb写一点吧。固然之前也写过,但此次偏重不太同样html
最小瓶颈路:u到v最大权值最小的路径。在最小生成树上。是次小生成树的一个子问题qwqspa
最小极差生成树:枚举最小生成树上的最小权值的大小code
应用:htm
low[u]定义为u子树中的点经过back edge和cross edge能达到的时间戳最小的点v的时间戳,且知足v能到达u(即v不在其余已经肯定的SCC中)blog
if(!dfn[v]) { dfs(v); low[u] = min(low[u], low[v]); } else if(!belong[v]) low[u] = min(low[u], dfn[v]);
low[u]定义不变,因为是无向图因此u和父亲的连边就是tree edge,即v不能够是父亲排序
而后要特判根的时候,至少俩孩子才能够get
PS:删点变树,不能删割点class
之前的变量
每一个变量有两个取值(x,x'),有一些条件限制了某两个变量不能同时取某个值。即“或”。时间戳
对于限制(a,b),连有向边(a,b'),(b,a')
a -> b 意味着a成立时b必须成立
选择一个没有赋值的变量x,赋值为真,而后dfs染色下去,冲突则无解(x和x'都为真)
应用:
判断某个变量在该系统中是否可取真:
今后变量开始dfs便可
求字典序最小的解:
从小到大,先赋值真染色,冲突的话把此次染色回滚掉,再赋值假染色
就是说进行x时,1...x-1时dfs染色的结果还保留着
复杂度:最坏\(O(nm)\)
优点在于咱们拥有决定一个变量取值的能力
原图有对称性
显然一个scc中的点要么都选要么都不选,x和x'在同一个scc中则无解
缩点,反向连边
进行拓扑排序,选第一个未染色的点,染白色,而后将否认点及其新图后代dfs染黑色(注意边是反向的,因此一个点为假那么他的后代必定为假)。重复此过程。
复杂度:\(O(m)\)
局限性很强,只能判断是否有解和构造一组解
字典序最小的解也不可作,由于toposort中不断加入ind=0的新点,标号更小的点能够是后加入的(但这时这个点可能已经由于以前的煞笔操做而被染成黑色了)