随笔分类 -  图论

摘要:# DFS ## [AcWing 842. 排列数字](https://www.acwing.com/problem/content/844/ "AcWing 842. 排列数字") 代码 ```cpp #include using namespace std; typedef pair PII; 阅读全文
posted @ 2023-07-15 11:06 kingwzun 阅读(25) 评论(0) 推荐(1)
摘要:定义 首先新建 n 个集合,每个集合恰有一个节点,点权为 0。 每次加边按照边权从小到大加入。 每一次加边会合并两个集合,我们可以新建一个点,点权为加入边的边权, 同时将两个集合的根节点分别设为新建点的左儿子和右儿子。 然后我们将两个集合和新建点合并成一个集合。将新建点设为根。 不难发现,在进行 n 阅读全文
posted @ 2022-09-07 20:56 kingwzun 阅读(200) 评论(2) 推荐(1)
摘要:原题链接 题意:判断图和补图 是否含有三元环 拉姆齐定理 拉姆齐定理: 在一个大于等于6个点的 完全图中,用红蓝两色染色,一定存在一个红色或者蓝色的三角形。 或者说:在总人数大于等于6的时候,一定存在这样的三个人,他们相互认识,或者相互不认识。 所以 点数n大于等于6:直接输出bad team,否则 阅读全文
posted @ 2022-09-07 17:06 kingwzun 阅读(104) 评论(0) 推荐(0)
摘要:给每个点按照度数大小编不同的号。 枚举点u,枚举和点u相邻的点v,枚举v的相邻且度数比uv大的点z,$ans+=cnt[z], ++cnt[z]$; 复杂度: 枚举uv的复杂度是 $O(n+m)$ 的,然后点z的数量不超过 $O(\sqrt{m})$ 个。 原因: 设与x相邻的度数大于x的点y有s个 阅读全文
posted @ 2022-09-07 12:00 kingwzun 阅读(88) 评论(0) 推荐(0)
摘要:原文:https://www.cnblogs.com/NicoDafaGood/p/7552893.html 题意 给一个n个点,m条边的无向图,求该图与其补图的三元环个数. (n<=1e5,m<=1e5,保证没有自环) 思路 首先考虑一个完全图,任意三个点都可以构成一个三元环. 因此完全图三元环的 阅读全文
posted @ 2022-09-07 11:37 kingwzun 阅读(82) 评论(0) 推荐(0)
摘要:理解 时间复杂度 $O(M \sqrt{M})$ 作用 求出无向图的所有三元环 过程 首先要对所有的无向边进行定向,对于任何一条边,从度数大的点连向度数小的点,如果度数相同,从编号小的点连向编号大的点。 此时这张图是一个有向无环图。 枚举每一个点u,然后将u的所有相邻的点都标记上“被u访问了”, 然 阅读全文
posted @ 2022-09-07 11:29 kingwzun 阅读(274) 评论(0) 推荐(0)
摘要:概述 作用: 求图中只有两种权值边的最短路。 理解: 如果我们的图中只有两种边0或者1(1也可以是任意的正数)。 每次从队头取出元素,我们就可以使用一个双端队列来模拟dij中的优先队列: 如果扩展到的边权值为0,就放入队头。 如果扩展到的边权值为1,就放入队尾。 很显然这样是满足优先队列的。因此算法 阅读全文
posted @ 2022-08-08 20:59 kingwzun 阅读(472) 评论(0) 推荐(0)
摘要:松弛: 考虑节点u以及它的后继节点v。从起点跑到v有好多跑法,有的跑法经过u,有的不经过。 经过u的跑法的距离就是$dist[u]+w_{u->v}$。 松弛操作就是比较$dist[v]$和$dist[u]+w_{u->v}$哪个大。 如果前者大一点,就说明当前的不是最短路,就要赋值为后者,这就叫做 阅读全文
posted @ 2022-08-05 19:53 kingwzun 阅读(480) 评论(0) 推荐(0)
摘要:约定: n是指点的数量,m是指边的数量 目录: Dijkstra算法 Dijkstra算法只能用于所有边权均为非负数值的图 Dijkstra算法有两种实现: 一种是朴素实现,复杂度是 $O(n^2) $ 一种是堆优化版,复杂度是 $O(m \log n)$ 堆优化版+邻接表存图有以下优点: 不需要对 阅读全文
posted @ 2022-08-05 15:06 kingwzun 阅读(62) 评论(0) 推荐(0)
摘要:基础概念 树的DFS序列就是说: 树的每一个节点在DFS中进出栈的时间序列。 具体来说就是对树从根开始进行深搜,按搜到的时间顺序把所有节点排队。 就比如 上面这棵树,它的一个DFS序就是: 1 4 6 6 3 9 9 3 4 7 7 2 5 5 8 8 2 1 注意两点: 一棵树的DFS序不唯一。 阅读全文
posted @ 2022-07-26 09:12 kingwzun 阅读(451) 评论(0) 推荐(0)
摘要:学习请看 染色法判断二分图 基础 $二分图 \Leftrightarrow 不存在奇数环 \Leftrightarrow染色体法不存在矛盾$ 题意: 给定一个 N 行 N 列的棋盘,已知某些格子禁止放置。 求最多能往棋盘上放多少块的长度为 2、宽度为 1 的骨牌,并且任意两张骨牌都不重叠。 思路: 阅读全文
posted @ 2022-07-15 14:09 kingwzun 阅读(36) 评论(0) 推荐(0)
摘要:原文 概括 以同起点为一条链,数组head[a]存储起点a的最新录入的一条边的索引,每条边以结构体的形式存储该边信息(该边终点,权值,同起点的边中的上一条边即上一次录入的边的位置),所有边构成一个结构体数组。 很多帖子说到的是存储的是下一条边,这种理解很容易给人误导,应该是每一条边都能通过自身结构体 阅读全文
posted @ 2022-07-13 11:14 kingwzun 阅读(53) 评论(0) 推荐(0)
摘要:割点和桥 桥(割边): 给定一无向连通图,对于其中一边 (u,v),若从图中删掉 (u,v)后,原图分裂成2个或以上不相连的子图(也就是图中的连通分量数增加),则称 (u,v)为原图的割边(或桥)。 割点: 给定一无向连通图,对于其中一点 u,若从图中删掉 u 和所有与 u 相连的边后,原图分裂成成 阅读全文
posted @ 2022-07-13 11:10 kingwzun 阅读(247) 评论(0) 推荐(0)
摘要:基本概念: 树枝边(x,y):x是y的父亲 前向边(x,y):x是y的祖先结点 后向边(x,y):y是x的祖先结点 横叉边(x,y):在对有向图进行dfs遍历时,x是已经搜过的图的分支(不是前向边),现在在搜的点是y,y到x的有向边是横叉边 连通分量作用 通过缩点,将图变成有向无环图 缩点步骤: f 阅读全文
posted @ 2022-07-11 11:34 kingwzun 阅读(60) 评论(0) 推荐(0)
摘要:深度优先遍历(DFS) 思想: 一条路走到底:走到访问过的结点,退回上一结点;从上一结点开始,继续遍历未访问的结点,重复此项工作。(遍历次序可能不同) 案例:根的先根遍历 代码(邻接矩阵)(连通图) **代码思想:**每次取出一个元素,放入与该元素相连的并且没有放入栈中的其他结点;直到无路可走,只取 阅读全文
posted @ 2022-04-01 17:15 kingwzun 阅读(271) 评论(0) 推荐(0)
摘要:概念 图的生成树 它的一棵含有所有顶点的无环连通子图。 特点: 有n个顶点一定有,n-1条边。 生成树是图的极小连通子图 (去掉一条边则非连通)。 分类: 深度优先生成树 广度优先生成树 最小生成树: 对于加权图(网) 的生成树中边的权重之和最小的生成树。 最小生成树可能不唯一 最小生成树作用: 修 阅读全文
posted @ 2022-02-08 16:46 kingwzun 阅读(475) 评论(0) 推荐(0)
摘要:基本概念 二分图又称二部图 定义: 设G=(U,V,E)是一个无向图,U和V是点的集合,E是边的集合。 如果符合: 集合U,V之间有边。 U集合内部没有边。 V集合内部没有边。 则称图G为二分图。 例如: 作用: 进行匹配,比如说给程序员分配工作,为动物分配主人。 判断是否为二部图 思想 染色法 步 阅读全文
posted @ 2022-01-19 14:31 kingwzun 阅读(1025) 评论(1) 推荐(0)
摘要:拓扑序: 在AOV网中,若不存在回路,(有向无环图) 则所有活动可排列成一个线性序列, 使得每个活动的所有前驱活动都排在该活动的前面,我们把此序列叫做拓扑序列 过程: Step0: 预处理得到每个点的入度 Step1: 执行入度为 0 的点(没有前驱),放入一个待执行的容器,在图中删除, Step2 阅读全文
posted @ 2021-08-20 10:09 kingwzun 阅读(91) 评论(0) 推荐(0)