弦(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 判定弦图
弦图
最新推荐文章于 2024-03-04 10:28:44 发布