【学习笔记】二部图 Vizing 定理

122 篇文章 0 订阅
89 篇文章 0 订阅

V i z i n g \rm Vizing Vizing 定理

G G G k k k 染色:将每条 染成 k k k 种颜色之一,使得任意两条共端点的边异色。

定义 χ ( G ) \chi(G) χ(G) 为,使得 G G G k k k 染色存在的最小 k k k 。对于一个二部图 G G G,假设点的度数最大是 D ( G ) \frak D(G) D(G),则有
χ ( G ) = D ( G ) \chi(G)=\frak D(G) χ(G)=D(G)

证明可以使用调整法。依次考虑每条边,设当前考虑到 ( x , y ) (x,y) (x,y),记 v x v_x vx x x x 已染色的邻边的颜色集合中,未出现过的最小正整数。显然 v x , v y ⩽ D ( G ) v_x,v_y\leqslant\frak D(G) vx,vyD(G),现在我们只需要致力于连一条 v x v_x vx 颜色的边。

如果 v x = v y v_x=v_y vx=vy,连上便是。否则,不妨设 v x < v y v_x<v_y vx<vy,即 y y y 已连了一条 v x v_x vx 颜色的边 e e e 。考虑将 e e e 的颜色修改为 v y v_y vy 。可能导致 e e e 的另一个端点出现矛盾,需要递归修改。形式化地:

y y y 出发找一条极长增广路径 y , p 1 , p 2 , … , p k y,p_1,p_2,\dots,p_k y,p1,p2,,pk,经过的边的颜色依次是 v x , v y , v x , v y , … , v x / y v_x,v_y,v_x,v_y,\dots,v_{x/y} vx,vy,vx,vy,,vx/y

由于图是二分图,不妨让 x x x X \frak X X 部, y y y Y \frak Y Y 部,那么每次走到 p i ∈ X p_i\in\frak X piX 都是经由一条 v x v_x vx 颜色的边,每次走到 p i ∈ Y p_i\in\frak Y piY 都是经由一条 v y v_y vy 颜色的边。由于每个点的临边颜色不同,所以 没有点被重复经过

同样可以发现,路径不会包含 x x x,否则走到它的时候就已经出现了 v x v_x vx 颜色的边,与 v x v_x vx 定义矛盾。将这些边的颜色全部翻转,即 v x → v y v_x\rightarrow v_y vxvy v y → v x v_y\rightarrow v_x vyvx,图仍然合法。

此时边 ( x , y ) (x,y) (x,y) 可以被染成 v x v_x vx 颜色。于是定理得证。

例题

题目描述
有一个二分图,你需要将所有边染上 c c c 种颜色之一,使得 ∑ v x \sum v_x vx 最小。其中 v x = max ⁡ j = 1 c w x ( j ) − min ⁡ j = 1 c w x ( j ) v_x=\max_{j=1}^{c}w_x(j)-\min_{j=1}^{c}w_x(j) vx=maxj=1cwx(j)minj=1cwx(j),定义 w x ( j ) w_x(j) wx(j) x x x 的邻边中颜色为 j j j 的数量。你只需输出这个最小和。

数据范围与提示
点数 n ⩽ 2 × 1 0 6 n\leqslant 2\times 10^6 n2×106,边数 k ⩽ 1 0 6 k\leqslant 10^6 k106,颜色种类数 c ∈ [ 1 , 1 0 5 ] c\in[1,10^5] c[1,105]

思路

不难发现 答案有一个下界是 n − ∑ i = 1 n [ c ∣ deg ⁡ i ] n-\sum_{i=1}^{n}[c\mid \deg_i] ni=1n[cdegi],即所有度数为 c c c 倍数的点提供 0 0 0 的贡献,其余的提供 1 1 1 的贡献。证明需要用到 V i z i n g \rm Vizing Vizing 定理(话说一般人都不会往这方面想吧)。

首先拆点(才能套用 V i z i n g \rm Vizing Vizing 嘛),将一个点拆成 ⌊ deg ⁡ c ⌋ \lfloor{\deg\over c}\rfloor cdeg 个度数为 c c c 的点,和一个度数为 deg ⁡   m o d     c \deg\bmod\;c degmodc 的点。原来接在这个点上的边,可以任意分配,只要满足度数的条件。新的图仍然是二分图,运用 V i z i n g \rm Vizing Vizing 定理将边染色。如果把拆出来的点合并回原来的点,考虑 v x v_x vx 的值:显然度数为 c c c 的点是 w ( j ) = 1    ( 1 ⩽ j ⩽ c ) w(j)=1\;(1\leqslant j\leqslant c) w(j)=1(1jc) 的,合并这个点不会导致 v x v_x vx 变化。所以只有度数为 deg ⁡   m o d     c \deg\bmod\;c degmodc 的点,是 w ( j ) = 1    ( j ∈ S ) w(j)=1\;(j\in S) w(j)=1(jS),提供 1 1 1 的贡献。如果 c ∣ deg ⁡ c\mid\deg cdeg 则不存在该点,也就没有贡献了。

原题就有了一个 O ( n + k ) \mathcal O(n+k) O(n+k) 的做法。

后记

模仿二分图匹配 H u n g a r y \rm Hungary Hungary 算法,我们证明了 V i z i n g \rm Vizing Vizing 定理。一个很有意思的地方是, H u n g a r y \rm Hungary Hungary 算法是可能无法增广的,而 V i z i n g \rm Vizing Vizing 总是可以!

还有一般简单图上的情况,这个我就搞不懂了,只能靠读者自己阅读了……

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值