弦图

考试正好有一道题目可以用弦图的方法来做
所以就正好看一下 CDQ 的论文
论文戳我看
把中间的一些定义啥的直接蒯(手打)下来了


子图:

从一个图中随意选一些点,一些边组成的图

诱导子图:

从一个图的点集中选择一个子集,以及链接了子集中点的所有的边,
组成的子图

团:

一个子图,且是完全图

极大团:

不是别的团的子图的团

最大团:

点数最多的团


最小染色:

用最少的颜色给图染色,相邻的点颜色不同

最大独立集:

选出最多的点,使得相邻点不同时被选

最小团覆盖:

用最少的团覆盖整个图

其中:

<=
<=


弦:

连接环中两个不相邻的点的边

弦图:

一个无向图中,任意一个大小超过 3 的环都至少有一个弦
弦图的诱导子图一定是弦图

单纯点:

N(v)表示与 v 相邻的点集。一个点是单纯点,当且仅当{v}+N(v)的诱导子图是一个团

引理:

任何一个弦图都至少有一个单纯点,不是完全图的弦图至少有两个不相邻的单纯点


完美消除序列:

一个点的序列 v1,v2,...vn 中(每个点恰好出现一次)
满足 vi {vi,vi+1,...,vn} 的诱导子图中是单纯点

定理:

一个图是弦图,当且仅当它有一个完美消除序列


求完美消除序列

朴素算法:

每次找一个单纯点 v ,加入到完美消除序列中
v与其相连的边都删去
重复上面过程,如果所有点都被删除则是弦图
时间复杂度 O(n4)

字典序广度优先搜索(Lex BFS )

直接去论文上看吧。。

最大势算法

n...1 的顺序给点标号(标号为 i 的点出现在完美消除序列的第i个)
label[i] 表示与多少个已经标号的点相邻
每次找 label 最大的点标号


判断一个序列是否为完美消除序列

朴素算法

依次判断即可
复杂度 O(nm)

优化算法

设在 vi,vi+1..vn 中,与 vi 相邻的点依次为 vj1...vjk
只需要判断 vj1 是否与其他点相邻即可
复杂度 O(n+m)


综上:
弦图判定问题可以在 O(n+m) 时间里面解决


以下的问题都在弦图中

用最少的颜色给所有点染色,使得相邻点不同色

从完美消除序列逆序来
每次给一个点染色可以染的最小的颜色
从中得出结论:团数=颜色数

求最小独立集

完美消除序列中,能选就选
结论:最大独立集=最小团覆盖

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值