杂题选讲 #1:二分图边着色

news/2024/10/4 7:25:14

Vizing 定理

定义

考虑如下的问题:对一个无向图的边进行着色,要求相邻的边染不同种颜色。问
需要的最少的颜色数是多少。

解决上述问题需要借助 Vizing 定理(又称维金定理)。

在开始之前,我们先进行一些符号的规定。

  • \(\Delta(G)\):无向图 \(G=(V,E)\) 的最大度数,即 \(\Delta(G)=\max_{i\in V}\deg i\)
  • \(\chi(G)\):若无向图 \(G\)\(k\) - 边可着色的,但不是 \((k-1)\) - 边可着色的,则称 \(\chi(G)\)\(G\) 的边色数,记为 \(\chi(G)\)

Vizing 定理的内容如下:

  • 对于简单无向图 \(G\),有 \(\Delta(G)\le\chi(G)\le\Delta(G)+1\)
  • 特别地,对于二分图 \(G\),有 \(\Delta(G)=\chi(G)\)

我们今天仅讨论后者的情况,即二分图的边着色。

证明

二分图上的 Vizing 定理为什么是正确的?

首先,必要性是显然的——不可能用比某个点的度数还少的颜
色数完成着色。

至于充分性,使用构造性证明。考虑执行如下算法:

对于二分图 \(G=(V,E)\),按顺序在二分图中加边。

加入一条边 \((u,v)\) 时,尝试寻找对于 \(u\)\(v\) 的编号最小且未使用过的颜色(你可以理解为 \(\mathrm{mex}\)),设为 \(A\)\(B\)

如果 \(A=B\),那么直接将这条边染上 \(A\)

否则令 \(A<B\),尝试将连接 \(v\) 的颜色为 \(A\) 的边的颜色强制改为 \(B\)

这样可能还会产生矛盾,假设这条边连接的另一个结点(设为 \(w\))上产生了矛盾,就把连接 \(w\) 的颜色为 \(B\) 的边的颜色再强制改为 \(A\)……

我们发现这是一个不断寻找增广路并对路径上的边交替染色的过程。

由于二分图不存在奇环,所以结点 \(u\) 不可能在增广路上,否则会与“最小未使用颜色为 \(A\)”矛盾。

时间复杂度 \(O(nm)\),其中 \(n=|V|\)\(m=|E|\)

模板题 CF600F

题意简述

构造出一组二分图边着色方案使得使用的颜色数最少。

数据范围:\(1\le n_1,n_2\le 1000\)\(1\le m\le 10^5\)

题目信息

来源:Codeforces

难度:\(\color{Red}\texttt{*2800}\)

正解

解法:完完全全的模板。实现时可以将其封装成一个类。

参考代码(C++17):

Submission #247875843 - Codeforces

[SNOI2024] 拉丁方

题意简述

定义一个 \(n \times n\) 的矩阵 \(A\) 为拉丁方,当且仅当每行每列都是一个 \(1 \sim n\) 的排列。

给定一个矩阵 \(A\) 左上角的一个 \(R \times C\) 的子矩阵,也就是 \(A_{i, j}\)\(1 \le i \le R\)\(1 \le j \le C\))。问能不能将剩下的位置填上数使得它是一个拉丁方。如果可以,构造出任意一组合法方案。

数据范围:多测,\(1\le T\le 5\)\(1\le R,C\le n\le 500\),输入的子矩阵不存在一行或者一列有两个相同的数。

题目信息

来源:陕西省 NOI 省队选拔赛 2024 D1T3

难度:\(\color{Darkblue}\texttt{NOI/NOI+/CTSC}\)

特殊性质 B:\(C=n\)

解法:从特殊性质 B 出发,可以观察到在这种情况下每一列要填哪些值都知道了,但是不知道每个值要填在哪一行。

于是考虑建出二分图,由未使用的值向列连边;因为要求同一行不能有相同的值,所以直接跑二分图边染色。

最终每条边的颜色即为该值在该列的行数。

可以证明这种情况下一定有解:此时对于每种颜色所有边构成了一组完美匹配。

正解

那么如何将上述做法扩展到 \(C\) 任意的情况?

考虑把原矩阵“补”成一个 \(C=n\) 的矩阵(就是把右上角那一块填上)再运用上述算法。仍然使用上面的做法,这次由值向行连边,然后每条边的颜色就是其所在的列。注意如果使用的颜色数 \(p\ne n-C\)(此时有点度数大于 \(n-C\))那么无解。

温馨提示:这题时限 5s,如果你还卡不过去,那么请把 int 换成 short。

参考代码(C++17):

提交记录 #335745 - QOJ.ac

练习题 & 总结

Vizing 定理算是一个比较冷门的知识点,直到 SNOI2024 它才逐渐变得广为人知。该类型的练习题较少,这里有两道可供参考:

  • UVa10615 Rooks
  • AtCoder AGC037D Sorting a Grid

参考资料:

  • 图的着色 - OI Wiki
  • 本人题解:[SNOI2024] 拉丁方 题解 by \(\color{Red}\mathrm{FFTotoro}\)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hjln.cn/news/44467.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

【日记】分墨器大道至简,还挺好用(342 字)

正文今天没见到任何客户,在柜台坐着玩手机玩了一天。倒是看了许多书,虽说也没看多少就是了。此外给植物换了水,同步了下文章,整理了一下数据什么的。因为钢笔都没墨水了,去拿新墨水时忽然看见商家送的分墨套装,想着旧墨水瓶里还剩下挺多吸不上来,挺浪费。这墨水毕竟不便…

Ton 区块链的官方 类ERC20-Token 智能合约代码-Transfer部分解析

作者:林冠宏 / 指尖下的幽灵。转载者,请: 务必标明出处。 掘金:https://juejin.im/user/1785262612681997 GitHub : https://github.com/af913337456/ 出版的书籍:《1.0-区块链DApp开发实战》 《2.0-区块链DApp开发:基于公链》Ton 区块链的官方 类ERC20-Token 智能合约代…

备忘:HP Gen8服务器创建Raid

HP Gen8服务器创建Raid(there are no physical disks attached)原文地址:https://blog.51cto.com/tianhunyongheng/1606948 HP最新的X86服务器是Gen8系列,这个系列使用了ACU工具来创建Raid,这是图形化界面,可以说是更友好了。 本来通常情况下如果是买了一台新的服务器…

流畅的python--第十一章 符合 Python 风格的对象

一个库或框架是否符合 Python 风格,要看它能不能让 Python 程序 员以一种简单而自然的方式执行任务。—— Martijn Faassen Python 和 JavaScript 框架开发者 得益于 Python 数据模型,自定义类型的行为可以像内置类型那样自 然。实现如此自然的行为,靠的不是继承,而是鸭子类…

【机器学习】支持向量机(个人笔记)

目录SVM 分类器的误差函数分类误差函数距离误差函数C 参数非线性边界的 SVM 分类器(内核方法)多项式内核径向基函数(RBF)内核 源代码文件请点击此处! SVM 分类器的误差函数 SVM 使用两条平行线,使用中心线作为参考系 \(L: \ w_1x_1 + w_2x_2 + b = 0\)。我们构造两条线,…

使用PyTorch Profiler进行模型性能分析,改善并加速PyTorch训练

如果所有机器学习工程师都想要一样东西,那就是更快的模型训练——也许在良好的测试指标之后 加速机器学习模型训练是所有机器学习工程师想要的一件事。更快的训练等于更快的实验,更快的产品迭代,还有最重要的一点需要更少的资源,也就是更省钱。 熟悉PyTorch Profiler 然后就…

AI智能文案助手ChatMoney:一键打造抖音爆款视频,助你轻松吸引千万级流量!

本文由 ChatMoney团队出品引言 看着抖音上别人的视频轻松破百万点赞,是不是心里痒痒的?想知道他们是怎么做到的?其实,他们可能只是比您先一步掌握了这个秘密武器——ChatMoney。这不仅仅是一个工具,它是您抖音视频流量变现的加速器。 您是否已经厌倦了平淡无奇的文案,看着…

抖音爆款制造机!用ChatMoney,一键生成爆款视频文案,轻松获得千万流量!

本文由 ChatMoney团队出品引言 看着抖音上别人的视频轻松破百万点赞,是不是心里痒痒的?想知道他们是怎么做到的?其实,他们可能只是比您先一步掌握了这个秘密武器——ChatMoney。这不仅仅是一个工具,它是您抖音视频流量变现的加速器。 您是否已经厌倦了平淡无奇的文案,看着…