zoukankan      html  css  js  c++  java
  • [整理]弦图学习笔记

    0.前言

    由于机房巨神都学了这玩意,以前也没接触过这些科技,于是决定拿出一晚上搞(颓)一搞(颓)。
    基本上是照着 OI Wiki 学的,有的证明会比较感性甚至懒得证。

    1.图论基础

    一些简单的定义不放了,可以参照《组合数学》(冯荣权,宋春伟)第七章图论。
    定理 (1.0) 设最小团覆盖数为 (kappa(G)),则 (alpha(G)lekappa(G))
    定理 (1.1) 弦图的导出子图为弦图。
    证明:若非弦图,则原图中有多于三元环,矛盾。(Box)
    定义 (1.2)(u,v) 间割点的集合称为点割集
    引理 (1.3) 设删去极小点割集 (I) 后包含 (u,v) 的连通块为 (G_u,G_v),则 (forall xin I,N(x)cap G_u evarnothing,N(x)cap G_v evarnothing)
    证明:反证即得。(Box)
    定理 (1.4) 弦图中任两点间极小点割集的导出子图为团。
    证明:数学归纳法。设极小点割集为 (I),则 (|I|=1) 时成立。
    (|I|>1),设 (u,vin I),由引理 (1.3) 易知,存在 (u_1,u_2in N(u),v_1,v_2in N(v)) 满足 (u_1,v_1in G_u,u_2,v_2in G_v)
    (usim v)(u,v) 之间最短路径,则此时显然存在多于四元环 (u-u_1sim v_1-v-v_2sim u_2-u),由于原图为弦图,所以环上必有至少一条弦。
    而显然这条弦只能连接 (u,v),于是定理得证。(Box)
    定义 (1.5)({x}+N(x)) 的导出子图为团,则称 (x)单纯点
    引理 (1.6) 弦图至少有一个单纯点,不是完全图的弦图至少有两个不相邻单纯点。
    证明:数学归纳法。显然点数 (le3) 时成立。
    设点数 (<n) 时成立,当前图(非完全图)有 (n) 个点,设 (I)(u,v) 间极小点割集,若 (G_u+I) 为完全图,则 (u) 即为单纯点;否则,(G_u+I) 为弦图,必存在两个不相邻单纯点。由于 (I) 的导出子图为团,所以 (G_u) 中必存在一个单纯点。于是定理得证。(Box)
    定义 (1.7) 一个图的完美消除序列(PEO)定义为 (1sim n) 的一个排列 (v_1,dots,v_n),满足任意 (v_i)({v_i,dots,v_n}) 的导出子图中为单纯点。
    定理 (1.8) 弦图 (Leftrightarrow) 存在 PEO。
    证明:由引理 (1.6) 易证充分性,由反证法易证必要性。(Box)

    2.弦图的判定

    先来看如何求 PEO,暴力求显然不行,于是就有了最大势算法Maximum Cardinality Search)。
    算法流程是这样的:倒序给点标号,设 (c_x)(N(x)) 中已标号的点数,则每次标 (c) 最大的点。
    正确性证明先咕着,想起来了再补。
    MCS 算法只是求出了一个序列,如果我们不知道原图是否为弦图,那么就需要判断一下。
    判断方法很简单,只需判断 (v_i)({v_i,dots,v_n}) 中相邻点中最小点是否与其他点连通即可。
    那么,我们用 (O(n+m)) 的复杂度解决了弦图判定问题。

    3.弦图的美妙性质

    3.1 最大独立集/最小团覆盖

    洛谷P3852 [TJOI2007]小朋友
    PEO 上从前往后依次选择即可。
    正确性:设通过这种方式选出了 (k) 个点,则 (kappa(G)le klealpha(G)),又 (alpha(G)lekappa(G)),所以 (k=alpha(G)=kappa(G))

    3.2 色数/团数

    洛谷P3196 [HNOI2008]神奇的国度
    PEO 上从后往前依次染色即可。
    正确性:与 3.1 类似,留作练习。
    如果不需要染色方案,还可以求 (max{|{x}+N(x)|})(这里的 (N(x)) 是 PEO 上 (x) 之后的邻居,下同)。

    3.3 极大团

    弦图的极大团一定是某一个 ({x}+N(x)),而我们需要判定是否为极大团。
    (G={x}+N(x),H={y}+N(y)),若 (Gsubset H),则 (G) 不是极大团并且 PEO 上 (y)(x) 前。
    (operatorname{next}(x))(N(x)) 中最靠前的点,(y^*) 为所有 (y) 中最靠后的点,那么 (operatorname{next}(y^*)=x)
    所以只需判断是否存在 (y) 满足 (operatorname{next}(y)=x,|N(x)|+1le|N(y)|) 即可。

    4.后记

    这篇文章仅介绍了与弦图有关的一部分内容,cdq 的论文中还提到了区间图、极大团树等科技,以后会加以补充。
    由于学得比较仓促,所以仅仅是入门水平,如果有描述不清或事实性错误请指出。
    其实这部分内容挺简单的,前提是你要感性理解。

    内容来自_ajhfff_的博客(https://www.cnblogs.com/juruoajh/),未经允许,不得转载。
  • 相关阅读:
    oracle 的exists 的用法
    linux
    C++纯虚函数
    C++ 的虚析构函数
    C++ new
    C++点和箭头操作符用法区别
    static
    关于C的int
    互斥量mutex的简单使用
    nginx服务器屏蔽上游错误码
  • 原文地址:https://www.cnblogs.com/juruoajh/p/14706182.html
Copyright © 2011-2022 走看看