这只是个人的一个笔记,对于我之前已经学过的这里就不讲了。
割空间与环空间
在图 \(G=(V,E)\) 上,将 \(V\) 划分成两个集合 \(V_1\) 和 \(V_2\),定义 \(V_1\) 和 \(V_2\) 的割集为 \(V_1\) 和 \(V_2\) 之间的所有边,所以的割集构成割空间。
定义所有满足每个点的度数都为偶数的子图的边集构成环空间。
定理:同一张无向图的割空间与环空间互为正交补。
不会证明。。。
切边等价
对于一张无向图的两条边,如果每个简单环要么同时包含它们要么同时不包含它们,则称它们切边等价。
如何求出切边等价。考虑建出 dfs 树,对于非树边都将给一个随机数值,并将 \((u,v)\) 的树链上的边都 xor 上这个随机数。可以发现权值为 \(0\) 的边为割边,权值相同的边切边等价。任意一个 xor 值为 \(0\) 的边集为这个图的割集。
几个比较简单性质。
- 在 dfs 树上,权值相同的树边一定形成祖先-后代链。
- 两种不同权值的等价类一定完全包含或完全相离,即不会出现 ABAB 的情况。
边三连通分量
把割边和切边等价的边都断开,剩下的就是边三连通分量,将所有的边三缩点后图会变成一个仙人掌。仙人掌每个环上的边都是切边等价的。
广义串并联树
。。。
树分解
对于一个无向图 \(G=(V,E)\) 建出一棵树,树上的每个点都包含一个 bag,bag 里面的是原图的一些点。对于原图的每条边 \((u,v)\),使得树上存在一个点的 bag 包含这两个点。并且都有树上所有 bag 里有点 \(u\) 的点形成一个连通块。
一个树分解的树宽为 \(max(|bag_u|)-1\)。\(tw(G)\) 为图 \(G\) 所有树分解中的最小树宽。
\(k\)-树是由 \(k+1\) 个点的完全图,进行若干次加点,满足每次添加的点恰好与之前的 \(k\) 个点之间有边,且这 \(k\) 个点之间两两有边,生成的图。 \(tw(G)<=k\) 当且仅当 \(G\) 为某一个 \(k\)-树的子图。
对于 \(tw(G)\) 较小的图可以利用树分解快速处理一些问题。
- 最小点覆盖/最大团,可以枚举一个 bag 中的点选还是不选,然后树形 DP,时间复杂度 \(O(n2^kploy(k))\)。
- 多次询问两点之间的距离,可以点分治,时间复杂度 \(O(nlog^2npoly(k)+qk)\)。
特殊图的树分解:
- 广义串并联图,\(tw(G) \le 2\)。对于去一度点直接用 \((u,v)\) 的 bag 连接即可,去二度点 \(u-v-w\) 可以让 \((u,v,w)\) 连向 \((u,v),(v,w),(u,w)\)。
- Halin Graphs,\(tw(G) \le 3\)。Halin Graphs 是将一棵树的叶节点按 dfs 序连成环的图。考虑在树上 dfs,每个点记录 \((u,l,r)\),\(l,r\) 代表子树 \(u\) 左侧和右侧的叶节点,合并时会产生大小为 \(4\) 的 bag。