Loading

[专题总结]初级图论

最短路

pair<int, int> 不要在开 long long 的时候使用,甚至不不 UBsanitizer

差分约束

普通差分约束

给定若干个变量 \(x_i\) , 和若干个限制 \(x_i-x_j \leq c\) ,要求一组合法解。

当然,可能还有 \(x_i-x_j \geq c\) 等,总之,我们把所有限制都写成 $x_i + c\leq x_j $ 的形式, \(c\) 可正可负。

然后发现这个满足三角不等式的形式,在 \(i,j\) 之间连一条长度为 \(c\) 的边,从 \(0\) 开始向所有点连一条长度为 \(0\) 的边,这样可以保证图的联通,然后从 \(0\) 跑一边最短路, \(dis_i\) 就是 \(x_i\)

当然有可能出现负环,这样代表无解,判断负环可以看最短路的长度,如果最短路的长度 \(\geq n\) , 那么肯定是出现了负环,但是在这题里面我们加了一个全新的点 \(0\) , 所以要判最短路长度是否 \(\geq n + 1\), code

字典序的扩展

在差分约束中,如果我们添加了虚点 \(0\) 向所有点连边,假如说要求所有的权 \(\leq 0\), 可以顺便求解差分约束系统的字典许最大值。

结论:差分约束求出的恰好是所有变量的最大值,也就是字典序最大的情况。

证明:考虑最短路的更新一定是 \(dis_y= dis_x+w(x,y)\), 所以所有变量都是取得等号。

字典序最小解直接把所有该建的边反过来求最大字典序,再对答案取相反数即可 (本质是把所有变量取反。

连通性(Tarjan)

有向图缩点

\(i,j\) 能相互到达,就说 \(i,j\) 是强连通的,强连通具有传递性,所以把每个极大的强连通图叫强连通分量。

把一张有向图里面所有的强连通分量缩成一个点,只保留各个缩完的点之间的边,这张图变成了一个 DAG。

Tarjan 算法的核心在于定义了一个找到 SCC 的充要条件。

定义 \(\rm low_x\) 代表以下节点 \(\rm dfn\) 的最小值 : \(x\) 子树内的点 / \(x\) 子树内指向的点。

发现, \(x\) 子树内的一些点形成 SCC, 就是这个子树的点无法和 \(x\) 子树外的点强连通, 也就是 \(\rm dfn_x == low_x\)

然后就是怎么转移 \(\rm low_x\) 的问题, 如果是 \(x\)\(dfs\) 树上的儿子,那么直接 \(\rm low\) 和他取 \(\min\), 否则,他是 \(x\) 指向的点,和 \(\rm dfn\)\(\min\) ,注意到必须保证这个点必须不被之前的强连通分量占据,对此,我们可以维护一个栈代表已经遍历并且不被弹出的点的集合,对于被访问过的点,判断在栈中再进行和 \(\rm dfn\)\(\min\)

同时, Tarjan 算法还保证了一个事情:强连通分量的编号就是拓扑序的逆序,这个根据 dfs 的过程不难发现。

无向图缩点

割点:删掉这个点之后图不连通。 割边:删掉这条边之后图不连通。

和有向图一样定义 \(\rm dfn, low\), 割边的条件是 \(dfn_x<low_y\), 割点的条件是 \(dfn_x \leq low_y\), 特殊注意如果是根则需要至少两个满足,原因很显然。

割边有一个细节,就是不能让他的父亲更新它,否则判断条件永远不可能达成。

边双:边双联通分量,不存在桥,删掉任意一条边仍然联通,任意两点之间有两条 边不重复路径

点双:点双联通分量,可以存在割点,但删掉任意一个点仍然联通,是特殊的边双,任意两点之间有两条 点不重复路径

边双缩点很简单,只需要找到割边,然后不走割边极大的连通快就是边双,边双缩点之后是一个树。

点双缩点,朴素的缩点方式并不能它变成一颗树,所以我们给每个点双一个代表点,让这个代表点想点双的所有点连边,也就是形成一个菊花。

把代表点记做“方点”,原有的点记做圆点,那么所有的边都在圆点和方点之间,最后整张图是一颗树,记做“圆方树”。

这个圆方树可以在一般图上使用,在仙人掌(每条边最多在一个简单环中), 有奇效,因为每个菊花代表一个简单环,并且这个环上的点还按顺序排列。

最重要的性质 : 圆方树上是叶子 \(\Leftrightarrow\) 在原图中不是割点,只有割点才会被很多强连通分量包含。

圆方树中删掉一个点和原图中删掉一个点,图的联通性(传递闭包之后的邻接矩阵)相同。

\(x,y\) 之间的必经点就是圆方树上他们路径上的圆点。

总之,见到必经,联通相关的一般图问题,圆方树一个思考方向,仙人掌圆方树是首选。

代码 : 有向图缩点, 无向图边双缩点无向图点双缩点

2-sat

欧拉回路

posted @ 2022-07-04 20:45  Soresen  阅读(58)  评论(0编辑  收藏  举报