尽管如此,弦图依旧强大

一些定义#

最小染色:用最少的颜色给点染色使得所有边连接的两点颜色不同。

色数:最小染色的颜色数。

团数:最大团的点数。

弦:连接环中不相邻两点的边。

弦图:任意长度大于 3 的环都有一个弦的图称为弦图。

点割集:对于图 G 上的两点 u,v,定义这两点间的点割集为满足删除这一集合后,u,v 两点之间不连通。

单纯点:若点 x 与他的所有相邻点的导出子图是一个团,则这个点是单纯点。

完美消除序列:令 n=|V|,完美消除序列 v1,v2,,vn1,2,,n 的一个排列,满足 vi{vi,vi+1,,vn} 的导出子图中为单纯点。

一些性质#

性质一#

团数 色数。

证明:
直接对最大团染不同颜色即可。

推论一#

在弦图中:团数 = 色数。

性质二#

最大独立集数 最小团覆盖数。

证明:
每个团中至多选择一个点。

推论二#

在弦图中:最大独立集数 = 最小团覆盖数。

性质三#

弦图的任意导出子图一定是弦图。

证明:
如果弦图有导出子图不是弦图,说明在这个导出子图上存在大于 3 的无弦环,那么原图也不是弦图,矛盾。

性质四#

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

性质五#

一个无向图是弦图当且仅当其有一个完美消除序列。

求法#

求出无向图的完美消除序列#

最大势算法(MCS)是一种可以在 O(n+m) 的时间复杂度内求出无向图的完美消除序列的方法。

思路#

逆序给结点编号,即按从 n1 的顺序给点标号。

labelx 表示第 x 个点与多少个已经标号的点相邻。

每次选择 label 值最大的未标号结点进行标号即可。

时间复杂度:O(n+m)

Code#

inline void mcs() {
  fro(i, 1, n) to[0].push_back(i);
  int sum = 0;
  pre(pos, n, 1) {
    int x = 0, y;
    while (!x) {
      while (to[sum].empty() == 0 && !x) {
        y = to[sum].back();
        if (!rk[y] && lb[y] == sum) x = y;
        to[sum].pop_back();
      }
      if(!x) sum--;
    }
    rk[x] = pos, id[pos] = x;
    for (int i = head[x]; i; i = e[i].nxt)
        lb[e[i].to]++, to[lb[e[i].to]].push_back(e[i].to), sum = max(sum, lb[e[i].to]);
  }
}

此算法可以证明,若无向图为弦图,则求出的序列一定是完美消除序列。

同样,若求出的序列为完美消除序列,则无向图一定是弦图。

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

根据完美消除序列的定义,设 vivi,vi+1,,vn 中相邻的点从小到大为 {vc1,vc2,,vck}

则只需判断 vc1 与其他点是否直接连通即可。

时间复杂度 O(n+m)

挑战 NPC#

各种不可做的图论问题在弦图上通通可以线性计算。

弦图实在是太厉害了。

求极大团#

N(x) 为满足与 x 相邻且在完美消除序列上的 x 之后的点集。

则弦图的极大团只有可能为为 {x}+N(x)

求最大团#

将所有的极大团取最大值即可。

也就是:maxi=1nlablei+1

求色数#

由于色数 = 团数,所以可以直接求最大团得到色数。

若需要方案。

可以在完美消除序列上从后往前染色,每个点染能染的最小颜色即可。

求最大独立集#

完美消除序列从前往后,选择所有没有与已经选择的点有直接连边的点。

求最小团覆盖#

设最大独立集为 {v1,v2,,vt},则团的集合 {{v1+N(v1)},{v2+N(v2)},,{vt+N(vt)}} 为图的最小团覆盖。

作者:JiaY19

出处:https://www.cnblogs.com/JiaY19/p/18275835

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   JiaY19  阅读(25)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示