弦图


弦(chord):连接环中不相邻的两个点的边。

弦图(chordal graph):一个无向图称为弦图当图中任意长度大于3的环都至少有一个弦。

团(clique):满足G为关于V的完全图的图。

单纯点(simplicial vertex):设N(v)表示与点v相邻的点集。一个点称为单纯点当{v} + N(v)的诱导子图为一个团。
 

完美消除序列(perfect elimination ordering)

定义:一个点的序列(每个点出现且恰好出现一次)v1, v2, …, vn满足vi在{vi, vi+1,…,vn}的诱导子图中为一个单纯点。

而这个序列有个很好的性质,一个无向图是弦图当且仅当它有一个完美消除序列。


怎么求 完美消除序列 呢,

第一步:给节点编号

设已编号的节点集合为A,未编号的节点集合为B

开始时A为空,B包含所有节点。

for num=n-1 downto 0 do

{

在B中找节点x,使与x相邻的在A集合中的节点数最多,将x编号为num,

并从B移入A

}

这个我们可以用优先队列维护(不是堆),打过HLLP都理解了。。。
 

怎么判断一个序列是否为完美消除序列呢?

第二步:检查

for num=0 to n-1 do

{

对编号为num的节点x,设所有编号大于num且与x相邻的节点集合为C,

在集合C中找出编号最小的节点y,如果集合C中存在不等于y的节点z,

且y与z间没有边,则此图不是弦图,退出。

}

检查完了,则该序列为完美消除序列,此图是弦图。

这个就是定义了,很好理解吧。


求极大团:

for num=0 to n-1 do

{

对编号为num的节点x,设所有编号大于num且与x相邻的节点集合为C,

在集合C中找出编号最小的节点y,

如果|C(y)|+1 <= |C(x)| 则y|C(y)不是极大团

}

这个也很好理解,y在C(x)中,而y|C(y) <= C(x),那么 y|C(y)一定被x|C(x)包含,所以y不是极大团。

 

由于C(x)是编号大于x的编号且与x相邻的节点集合 ,所以从前往后扫能选则选,求出的一定是最小团覆盖和最大独立集;

从后往前扫就一定是最大团和最小染色(定义要记清楚)。


这个可以理解为,从前往后会把每个极大团的标号最小的那个点选出来,一定会选完 所有团,所以是最小团覆盖。

 
而从后往前会把 最大团 算出来,这个也很好理解了。
 

区间图可以直接按 右端点从左到又排序。



为什么呢?因为从这个区间的右端点往右的所有区间如果和它相交,则都经过这个区间的右端点,所有就是团。

 

例题么? hnoi2008 kingdom最小染色

zoj 1015 判定弦图


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值