图论 III
本文主要讲解:网络流,二分图染色,2-sat,差分约束
定义与记号
基本定义
- 图:一张图 \(G\) 由若干个点和连接这些点的边构成。点的集合称为 点集 \(V\),边的集合称为 边集 \(E\),记 \(G = (V, E)\)。
- 阶:图 \(G\) 的点数 \(|V|\) 称为 阶,记作 \(|G|\)。
- 无向图:若 \(e\in E\) 没有方向,则 \(G\) 称为 无向图。无向图的边记作 \(e = (u, v)\),\(u, v\) 之间无序。
- 有向图:若 \(e\in E\) 有方向,则 \(G\) 称为 有向图。有向图的边记作 \(e = u\to v\) 或 \(e = (u, v)\),\(u, v\) 之间有序。无向边 \((u, v)\) 可视为两条有向边 \(u\to v\) 和 \(v\to u\)。
- 重边:端点和方向(有向图)相同的边称为 重边,当且仅当对于两条边 \(e_1=(u,x),e_2=(u,y)\) 中 \(x=y\)。
- 自环:连接相同点的边称为 自环,当且仅当 \((u,v)\) 中 \(u=v\)。
相邻
- 相邻:在无向图中,称 \(u, v\) 相邻 当且仅当存在 \(e = (u, v)\)。
- 邻域:在无向图中,点 \(u\) 的 邻域 为所有与之相邻的点的集合,记作 \(N(u)\)。
- 邻边:在无向图中,与 \(u\) 相连的边 \((u, v)\) 称为 \(u\) 的 邻边。
- 出边 / 入边:在有向图中,从 \(u\) 出发的边 \(u\to v\) 称为 \(u\) 的 出边,到达 \(u\) 的边 \(v\to u\) 称为 \(u\) 的 入边。
- 度数:一个点的 度数 为与之关联的边的数量,记作 \(d(u)\),\(d(u) = \sum_{e\in E} ([u = e_u] + [u = e_v])\)。点的自环对其度数产生 \(2\) 的贡献。
- 出度 / 入度:在有向图中,从 \(u\) 出发的边数称为 \(u\) 的 出度,记作 \(d ^ +(u)\);到达 \(u\) 的边数称为 \(u\) 的 入度,记作 \(d ^ -(u)\)。
路径
- 途径:连接一串相邻结点的序列称为 途径,用点序列 \(v_{0..k}\) 和边序列 \(e_{1..k}\) 描述,其中 \(e_i = (v_{i - 1}, v_i)\)。常写为 \(v_0\to v_1\to \cdots \to v_k\)。
- 迹:不经过重复边的途径称为 迹。
- 回路:\(v_0 = v_k\) 的迹称为 回路。
- 路径:不经过重复点的迹称为 路径,也称 简单路径。不经过重复点比不经过重复边强,所以不经过重复点的途径也是路径。注意题目中的简单路径可能指迹。
- 环:除 \(v_0 = v_k\) 外所有点互不相同的途径称为 环,也称 圈 或 简单环。
连通性
- 连通:对于无向图的两点 \(u, v\),若存在途径使得 \(v_0 = u\) 且 \(v_k = v\),则称 \(u, v\) 连通。
- 弱连通:对于有向图的两点 \(u, v\),若将有向边改为无向边后 \(u, v\) 连通,则称 \(u, v\) 弱连通。
- 连通图:任意两点连通的无向图称为 连通图。
- 弱连通图:任意两点弱连通的有向图称为 弱连通图。
- 可达:对于有向图的两点 \(u, v\),若存在途径使得 \(v_0 = u\) 且 \(v_k = v\),则称 \(u\) 可达 \(v\),记作 \(u \rightsquigarrow v\)。
- 关于点双连通 / 边双连通 / 强连通,见对应章节。
特殊图
- 简单图:不含重边和自环的图称为 简单图。
- 基图:将有向图的有向边替换为无向边得到的图称为该有向图的 基图。
- 有向无环图:不含环的有向图称为 有向无环图,简称 DAG(Directed Acyclic Graph)。
- 完全图:任意不同的两点之间恰有一条边的无向简单图称为 完全图。\(n\) 阶完全图记作 \(K_n\)。
- 树:不含环的无向连通图称为 树,树上度为 \(1\) 的点称为 叶子。树是简单图,满足 \(|V| = |E| + 1\)。若干棵(包括一棵)树组成的连通块称为 森林。相关知识点见 “树论”。
- 稀疏图 / 稠密图: \(|E|\) 远小于 \(|V| ^ 2\) 的图称为 稀疏图,\(|E|\) 接近 \(|V| ^ 2\) 的图称为 稠密图。用于讨论时间复杂度为 \(\mathcal{O}(|E|)\) 和 \(\mathcal{O}(|V| ^ 2)\) 的算法。
子图
- 子图:满足 \(V'\subseteq V\) 且 \(E'\subseteq E\) 的图 \(G' = (V', E')\) 称为 \(G = (V, E)\) 的 子图,记作 \(G'\subseteq G\)。要求 \(E'\) 所有边的两端均在 \(V'\) 中。
- 导出子图:选择若干个点以及两端都在该点集的所有边构成的子图称为该图的 导出子图。导出子图的形态仅由选择的点集 \(V'\) 决定,记作 \(G[V']\)。
- 生成子图:\(|V'| = |V|\) 的子图称为 生成子图。
- 极大子图(分量):在子图满足某性质的前提下,子图 \(G'\) 称为 极大 的,当且仅当不存在同样满足该性质的子图 \(G''\) 且 \(G'\subsetneq G''\subseteq G\)。\(G'\) 称为满足该性质的 分量。例如,极大的连通的子图称为原图的连通分量,也就是我们熟知的连通块。
约定
- 记 \(n\) 表示点集大小 \(|V|\),\(m\) 表示边集大小 \(|E|\)。
1. 2-SAT
前置:强联通分量(Tarjan)、拓扑序、缩点。
1.1 定义
给出 \(n\) 个变量,每个变量有一个取值集合,每个集合有两个元素 \({a_i,b_i}\)。已知若干个条件,表示 \(c_i\) 和 \(c_j\) 矛盾(即集合 \(i\) 选择 \(c_i\) 则集合 \(j\) 不能选择 \(c_j\))。
我们希望给每个变量赋值,判断是否存在一组解使得没有产生冲突。
1.2 解的存在性
我们通常建图后使用强联通分量解决 2-SAT 问题。
具体的,假设我们要处理条件 \([a_i,a_j]\),即集合 \(i\) 选择 \(a_i\) 则集合 \(j\) 不能选择 \(a_j\)。
我们建两条边:\((a_i,b_j)\) 和 \((a_j,b_i)\),含义为前者满足后者就必须满足。
其他条件用类似的方法处理建图。
之后我们求 scc。如果有一个集合的 \(a_i,b_i\) 在用一个 scc 里,其含义为如果选了 \(a_i\) 就必须选 \(b_i\),这肯定是无解的。否则就存在合法解。
1.3 构造合法解
我们按照图中拓扑序定向,如果 \(a_i\) 在 \(b_i\) 前面,那么取 \(a_i\),否则为 \(b_i\)。然而并不需要求一遍拓扑序,在 Tarjan 算法中我们维护的栈就是一个天然的拓扑序,所以求得的 scc 编号即为反拓扑序。
1.4 例题
1.4.1 P5782 [POI 2001] 和平委员会
题意
有 \(n(n\le8000)\) 个党派,每个党派有两个代表。有 \(m(m\le20000)\) 个代表之间的双向厌恶关系。
现在要成立一个委员会,要求每个党派恰好有一个代表在会中,且没有两个代表是互相厌恶的。构造合法解。
图论 III的更多相关文章
- 洛谷P5151 HKE与他的小朋友 快速幂/图论+倍增
正解:矩阵快速幂/tarjan+倍增 解题报告: 传送门! 跟着神仙做神仙题系列III 这题首先一看到就会想到快速幂趴?就会jio得,哦也不是很难哦 然而,看下数据范围,,,1×105,,,显然开不下 ...
- 【学时总结】 ◆学时·III◆ 二分图
[学时·III] 二分图 ■基本策略■ 其实本质是图论中的网络流 二分图是两个由多个点组成的集合(上部和下部,且没有重叠),两个集合中的点不与该集合内其他的点连通,但和另一个集合内的点连通.我们称这两 ...
- [leetcode] 题型整理之图论
图论的常见题目有两类,一类是求两点间最短距离,另一类是拓扑排序,两种写起来都很烦. 求最短路径: 127. Word Ladder Given two words (beginWord and end ...
- 用Kotlin开发Android应用(III):扩展函数和默认值
这是关于Kotlin的第三篇. 原文标题:Kotlin for Android (III): Extension functions and default values 原文链接:http://an ...
- LeetCode Single Number I / II / III
[1]LeetCode 136 Single Number 题意:奇数个数,其中除了一个数只出现一次外,其他数都是成对出现,比如1,2,2,3,3...,求出该单个数. 解法:容易想到异或的性质,两个 ...
- SPOJ GSS3 Can you answer these queries III[线段树]
SPOJ - GSS3 Can you answer these queries III Description You are given a sequence A of N (N <= 50 ...
- 【Codeforces717F】Heroes of Making Magic III 线段树 + 找规律
F. Heroes of Making Magic III time limit per test:3 seconds memory limit per test:256 megabytes inpu ...
- LeetCode——Best Time to Buy and Sell Stock III (股票买卖时机问题3)
问题: Say you have an array for which the ith element is the price of a given stock on day i. Design a ...
- 1. Two Sum I & II & III
1. Given an array of integers, return indices of the two numbers such that they add up to a specific ...
- 【LeetCode】Single Number I & II & III
Single Number I : Given an array of integers, every element appears twice except for one. Find that ...
随机推荐
- 太喜欢啦,浏览器中的SQL神器:WhatTheDuck让CSV分析像聊天一样简单!
嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 基于DuckDB的轻量级Web应用 | 完全浏览器端运行 | 零数据泄露风险 | 支持复杂S ...
- bootstrap4下拉菜单无法显示问题
刚才在菜鸟教程学习bootstrap4时在按钮组章节中遇到了下拉菜单,可是自己没有调试出来!!! 我把菜鸟的代码copy(全部)到本地发先可以运行!!! 找了半天原因,可能是自己导入的js文件有错!! ...
- 操作系统综合题之“用记录型信号量机制的wait操作和signal操作写出三个进程的同步代码(水果进箱问题-代码补充)”
1.问题:假设一个水果赛选系统由三个进程A.B.C组成.进程A每次取一个水果,之后存放在货架F上,F的容量为每次只能存放一个水果.若货架上存放的是苹果则让进程B取出,并存放到苹果箱中:若货架上存放的是 ...
- 操作系统综合题之“用记录型信号量机制的wait和signal操作来解决了由北向南和由南向北过河人的同步问题(独木桥问题-代码补充)”
1.问题:一条哦东西走向河流上,有一根南北走向的独木桥,要想过河只能通过这根独木桥.只要人们朝着相同的方向过独木桥,同一时刻允许有多个人可以通过.如果在相反的方向上同时有两个人过独木桥则会发生死锁.如 ...
- 递归神经网络 RNN 原理(下)
基于对 RNN 的初步认识, 还是先回顾一下它核心的步骤: (1) words / onehot vectors : \(x^{(t)} \in R^{|v|}\) **(2) word embedd ...
- codeup之查找
Description 输入数组长度 n 输入数组 a[1-n] 输入查找个数m 输入查找数字b[1-m] 输出 YES or NO 查找有则YES 否则NO . Input 输入有多组数据. 每组输 ...
- codeup之特殊乘法
Description 写个算法,对2个小于1000000000的输入,求结果.特殊乘法举例:123 * 45 = 14 +15 +24 +25 +34+35 Input 两个小于1000000000 ...
- C#/.NET/.NET Core技术前沿周刊 | 第 39 期(2025年5.19-5.25)
前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...
- Mimikatz 常用命令
以肉去蚁蚁愈多,以鱼驱蝇蝇愈至. 导航 1 工具介绍 2 基本用法 2.1 执行方式 2.2 帮助命令 3 模块用法 3.1 Standard 模块 3.2 Privilege 模块 3.3 Toke ...
- 聊聊@Autowired注解的Field injection is not recommended提示问题
1. 前言 在我接触过的大部分Java项目中,经常看到使用@Autowired注解进行字段注入: import org.springframework.beans.factory.annotation ...