弦图
弦图
考试正好有一道题目可以用弦图的方法来做
所以就正好看一下\(CDQ\)的论文
论文戳我看
把中间的一些定义啥的直接蒯(手打)下来了
子图:
从一个图中随意选一些点,一些边组成的图
诱导子图:
从一个图的点集中选择一个子集,以及链接了子集中点的所有的边,
组成的子图
团:
一个子图,且是完全图
极大团:
不是别的团的子图的团
最大团:
点数最多的团
最小染色:
用最少的颜色给图染色,相邻的点颜色不同
最大独立集:
选出最多的点,使得相邻点不同时被选
最小团覆盖:
用最少的团覆盖整个图
其中:
\(团数<=色数\)
\(最大独立集数<=最小团覆盖数\)
弦:
连接环中两个不相邻的点的边
弦图:
一个无向图中,任意一个大小超过\(3\)的环都至少有一个弦
弦图的诱导子图一定是弦图
单纯点:
设\(N(v)\)表示与\(v\)相邻的点集。一个点是单纯点,当且仅当\(\{v\}+N(v)\)的诱导子图是一个团
引理:
任何一个弦图都至少有一个单纯点,不是完全图的弦图至少有两个不相邻的单纯点
完美消除序列:
一个点的序列\(v_1,v_2,...v_n\)中(每个点恰好出现一次)
满足\(v_i\)在\(\{v_i,v_{i+1},...,v_n\}\)的诱导子图中是单纯点
定理:
一个图是弦图,当且仅当它有一个完美消除序列
求完美消除序列
朴素算法:
每次找一个单纯点\(v\),加入到完美消除序列中
将\(v\)与其相连的边都删去
重复上面过程,如果所有点都被删除则是弦图
时间复杂度\(O(n^4)\)
字典序广度优先搜索(Lex BFS )
直接去论文上看吧。。
最大势算法
按\(n...1\)的顺序给点标号(标号为\(i\)的点出现在完美消除序列的第\(i\)个)
设\(label[i]\)表示与多少个已经标号的点相邻
每次找\(label\)最大的点标号
判断一个序列是否为完美消除序列
朴素算法
依次判断即可
复杂度\(O(nm)\)
优化算法
设在\(v_i,v_{i+1}..v_n\)中,与\(v_i\)相邻的点依次为\(v_{j1}...v_{jk}\)
只需要判断\(v_{j1}\)是否与其他点相邻即可
复杂度\(O(n+m)\)
综上:
弦图判定问题可以在\(O(n+m)\)时间里面解决
以下的问题都在弦图中
用最少的颜色给所有点染色,使得相邻点不同色
从完美消除序列逆序来
每次给一个点染色可以染的最小的颜色
从中得出结论:团数=颜色数
求最小独立集
完美消除序列中,能选就选
结论:最大独立集=最小团覆盖