ACM--图论
文章平均质量分 76
ACM--图论
「已注销」
“没有人能把你变好,
时间和经历只是陪衬。
支撑你变得越来越好的,是你坚强的意志、修养、品行,以及不断的反思和修正。”
展开
-
无向图全局最小割
文章目录无向图全局最小割1.算法分析2.模板2.1 O(N^3)2.2 O(nmlog(m))3.典型例题无向图全局最小割1.算法分析2.模板2.1 O(N^3)// HDU 3691#include <bits/stdc++.h>using namespace std;typedef long long LL;const int MAXN = 310;LL mat[MAXN][MAXN];LL weight[MAXN];bool del[MAXN], vis[MA原创 2021-06-15 21:32:12 · 100 阅读 · 0 评论 -
找环
文章目录找环1.算法分析1.1 判断是否存在环1.2 找出所有环上的所有点1.3 类拓扑排序找出与度数有关的点集->退化到度数为2的环1.4 找到以s为源点的最小环1.5 floyd找到有向图/无向图的最小环2.模板2.1 判断是否存在环2.2 找出所有环上的所有点2.3 类拓扑排序找出与度数有关的点集->退化到度数为2的环2.4 找到以s为源点的最小环2.5 floyd找最小环3.典型例题3.1 类拓扑排序找出与度数有关的点集->退化到度数为2的环3.2 找到以s为源点的最小环3.3 f原创 2021-03-02 16:40:38 · 606 阅读 · 0 评论 -
Prufer编码
文章目录Prufer编码1.算法分析1.1 prufer序列的构建1.2 prufer序列重建树1.3 Cayley公式1.4 图连通方案数2.模板3.典型例题Prufer编码1.算法分析Prufer 序列 (Prufer code),是一种将带标号的树用一个唯一的整数序列表示的方法。Prufer 序列可以将一个带标号 n 个结点的树用 [1, n] 中的 n - 2个整数表示,也可以理解为完全图的生成树与数列之间的双射。Prufer一般不用于维护树结构,常用于组合计数问题。1.1 prufer序列原创 2021-02-21 18:28:26 · 625 阅读 · 0 评论 -
最小树形图
文章目录最小树形图1.算法分析2.模板3.典型例题3.1 定根最小树形图3.2 不定根最小树形图最小树形图1.算法分析有向图上的最小生成树(Directed Minimum Spanning Tree)称为最小树形图。常用的算法是朱刘算法(也称 Edmonds 算法),可以在 O(nm)O(nm)O(nm) 时间内解决最小树形图问题。该算法最后能够找到一个从根出发,能够走到任意一个点的一个最小权值的有向的树。流程对于每个点,选择它入度最小的那条边如果没有环,算法终止;否则进行缩环并更新其他点原创 2021-02-21 02:54:06 · 296 阅读 · 0 评论 -
欧拉回路
文章目录欧拉回路1.算法分析2.模板2.1 记录点的情形2.2 记录边的情形3.典型例题3.1 欧拉回路判定3.2 欧拉路记录边的情景3.3 欧拉路记录点的情景欧拉回路1.算法分析几个概念:1.欧拉路:给定一张无向图,若存在一条从节点S到节点T的路径,恰好不重不漏地经过每条边一次(可以重复经过图中的节点),则称该路径为S到T的欧拉路2.欧拉回路:若存在一条从S出发的路径,恰好不重不漏地经过每条边一次(可以重复经过图中的节点),最终回到起点S,则称该路径为欧拉回路3.欧拉图:存在欧拉回路的无原创 2021-01-06 02:19:55 · 1438 阅读 · 0 评论 -
dfs序在算法在的运用
文章目录dfs序在算法在的运用1.算法分析1.1 基本概述1.2 几类经典问题1.2.1 单点修改,求子树和1.2.2 子树增加,子树查询1.2.3 子树增加,子树查询**1.2.4 树链修改,单点查询**1.2.5 树链修改,子树和查询1.2.6 单点修改,树链查询1.2.7 子树修改,树链查询2.模板2.1 求dfs序2.2 几类经典问题2.2.1 单点修改,求子树和(问题1)2.2.2 子树增加,子树查询(问题2)2.2.3 树链修改、单点查询、区间查询(问题4+问题5)2.2.4 单点修改、子树修改原创 2020-12-29 11:24:54 · 225 阅读 · 0 评论 -
Havel-Hakimi定理
文章目录Havel-Hakimi定理1.算法分析2.模板3.典型例题Havel-Hakimi定理1.算法分析对于图的所有顶点,我们可以统计出每个顶点的度。所有度组成的序列,我们称之为:度序列。那么反过来,给定一个序列,如何判断这个序列是可图的?Havel-Hakimi定理可以用来判定一个序列是否可图。2.模板#include <bits/stdc++.h>using namespace std;struct node { int id, v; node() {}原创 2020-12-29 11:23:45 · 435 阅读 · 0 评论 -
斯坦纳树
文章目录斯坦纳树1.算法分析1.1 斯坦纳树1.2 斯坦纳森林2. 算法模板2.1 斯坦纳树2.2 斯坦纳森林3. 典型例题3.1 求斯坦纳树3.2 求斯坦纳森林斯坦纳树1.算法分析算法描述:在一个图中,有若干个关键点,将这几个关键点连在一起的最小花费,就是斯坦纳树问题不同的题目会有不同的限制,比如求 斯坦纳树 ,比如求 斯坦纳森林(需要对斯坦纳树在进行一次状压)1.1 斯坦纳树状态表示: f[i][state]f[i][state]f[i][state]表示以i为根的,关键点状态为state原创 2020-10-30 22:56:39 · 1362 阅读 · 1 评论 -
网络流
文章目录网络流1. 算法分析1.1 基本概念1.1.1 网络1.1.2 可行流1.1.3 残量网络1.1.4 増广路1.1.5 割1.1.5.1 定义1.1.5.2 性质1.2 最大流1.2.1 最大流之匹配问题1.2.1.1 最大流求二分匹配问题1.2.1.2 最大流之多重匹配问题1.2.2 最大流之上下界可行流1.2.2.1 无源汇上下界可行流1.2.2.2 有源汇上下界最大流1.2.2.3 有源汇上下界最小流1.2.3 最大流之多源汇最大流1.2.4 最大流之关键边1.2.5 拆点1.3 最小割1.3原创 2020-10-03 19:15:57 · 564 阅读 · 0 评论 -
最小生成树
文章目录最小生成树1. 算法分析2. 板子2.1 prime算法2.2 kruskal算法3. 典型例题3.1 同时有点权和边权的最小生成树3.2 选定边集最小生成树3.3 最大边最小--生成树/森林3.4 最优比率生成树3.5 寻找存在于所有最小生成树的边3.6 最小生成树恢复成完全图3.7 最小生成森林3.8 最短路径树3.8.1 求最短路径树的数目3.8.2 最短路径树必经边3.9 次小生成树3.10 杂题最小生成树1. 算法分析mst性质最小生成树的题目都是无向图;连通图必存在最小原创 2020-09-24 14:24:53 · 238 阅读 · 0 评论 -
最短路
文章目录最短路1. 算法分析1.1 图论最短/长路模型1.2 图论建模技巧2. 板子2.1 dijkstra朴素版本求最短路 (O(n2)):适合稠密图,用邻接矩阵存储,不能处理有负权边情况2.2 dijkstra堆优化版本求最短路 (O(mlogn)):与边数有关,适合稀疏图,使用邻接表存储,不能处理有负权边情况2.3 dijkstra双端队列优化版本求最短路 O(m+n):边权为01特殊情况2.4 dijkstra有条件约束求最短路 (O(mlogn)):补充一个数组作为约束条件2.5 bellman_原创 2020-09-23 00:14:01 · 241 阅读 · 1 评论 -
最大团
文章目录最大团1.算法分析2. 典型例题2.1 板子题2.2 二分+最大团2.3一般无向图最大独立集最大团1.算法分析概念: 当G′是图G的子图,且G′是关于V′的完全图时,子图G’为图G的团;当G’是团,且不是其他团的子集时,G’为图G的极大团;当G’是极大团时,且点数最多,G’为图G最大团一般无向图的最大独立集=补图的最大团求最大团使用Bron–Kerbosch算法,时间O(3^(n/3))基本思想就是dfs+剪枝2. 典型例题2.1 板子题ZOJ 1492 Maximum Cliqu原创 2020-09-23 00:07:40 · 82 阅读 · 0 评论 -
有向图强连通分量
文章目录有向图强连通分量1 基本概念1.1 名词解释1.2 重要性质1.3 结论2. 板子3. 例题3.1 tarjan + 缩点 + 度3.2 tarjan + 缩点 + dp3.2.1 求最长链、求方案数3.2.2 求解差分约束3.2.3 求解必经点问题有向图强连通分量1 基本概念1.1 名词解释强连通分量:如果有向图中任意两点都有互相可达的路径,则此图为强连通图。有向图G的极大强连通子图称为G的强连通分量(SCC)(单点肯定都是scc,但要使scc尽可能大,所以能大尽量大)dfn[x]数组:原创 2020-09-23 00:03:33 · 653 阅读 · 0 评论 -
无向图双连通分量
文章目录无向图双连通分量1.算法分析2. 算法模板3. 典型例题3.1 求桥和边dcc3.2 割点2.3 求点dcc无向图双连通分量1.算法分析几个重要概念:1.割点:无向连通图中,去掉一个顶点及其和它相邻的所有边,图中的连通分量数增加,则该顶点称为割点2.桥(割边):无向连通图中,去掉一条边,图中的连通分量数增加,则这条边称为桥或者割边3.双连通分量(DCC):1)边双连通:若一个无向连通图中去掉任意一条边都不会改变此图的连通性,即不存在桥,那么称作边双连通图e-DCC2)点双连通:若一个原创 2020-09-23 00:03:03 · 321 阅读 · 0 评论 -
拓扑排序
文章目录拓扑排序1. 算法分析1.1 特点分析1.2 使用场景2. 例题2.1 求出拓扑序2.1.1 一般拓扑序2.1.2 求出字典序最大/最小的拓扑序2.2 判断图中是否有环2.3 拓扑排序+dp2.3.1 求最短路\最长路2.3.2 求可达性拓扑排序1. 算法分析1.1 特点分析 拓扑排序可以在线性的时间复杂度 O(n + m) 内完成求出拓扑序的操作,对象是有向无环图。拓扑图的性质如下:有向图才有拓扑序有向无环图必定存在拓扑序存在拓扑序 <=> 无环有向无环图至少原创 2020-09-22 23:56:38 · 393 阅读 · 0 评论 -
负环与差分约束
文章目录负环与差分约束1. 基本概念、方法1.1 负环1.1.1 spfa 判负环/正环1.1.2 tarjan+缩点 判断正环/负环1.1.3 拓扑排序 判断正环/负环1.2 差分约束2. 例题2.1 负环/正环判定2.1.1 spfa判断负环/正环2.1.2 tarjan求scc+缩点判断正环/负环2.1.3 拓扑排序判断正环/负环2.2 差分约束2.2.1 spfa差分约束2.2.2 tarjan求scc + 缩点 + dp 差分约束2.2.3 拓扑排序 差分约束负环与差分约束1. 基本概念、方法原创 2020-09-21 22:53:27 · 299 阅读 · 0 评论 -
匹配问题
文章目录二分匹配1. 算法分析1.1 几个重要概念1.2 二分图判定1.3 二分图点覆盖、独立集和最小路径点覆盖1.3.1 二分图的点覆盖1.3.2 二分图的独立集1.3.3 DAG的最小路径点覆盖1.3.4 DAG的最小路径可重复点覆盖2. 模板2.1 染色法判断是否为二分图2.2 匈牙利算法找最大匹配3. 典型例题3.1 染色问题3.2 二分匹配问题3.3 二分图的点覆盖集3.4 二分图的点独立集3.5 DAG的最小路径覆盖二分匹配1. 算法分析1.1 几个重要概念1.交替路:从一个未匹配点出发原创 2020-09-21 22:47:56 · 925 阅读 · 0 评论 -
带花树匹配
文章目录带花树匹配1.算法分析2. 算法模板3. 典型例题3.1 第一个应用3.2 第二个应用带花树匹配1.算法分析2. 算法模板#include<iostream>#include<cstdio>#include<cstdlib>#include<string>#include<cstring>#include<cmath>#include<ctime>#include<algorithm>原创 2020-09-21 22:46:31 · 85 阅读 · 0 评论 -
2-sat
文章目录2-sat1.算法分析2. 板子3. 典型例题3.1 已知点与点关系3.2 未知点与点关系2-sat1.算法分析 有 n 个变量x[1…n],每个变量的可能取值为1或0(或称i和~i必取到其中1个)。 给定 m 个约束条件,每个约束条件形如:若 x[i] 取 i(或者~i),则 x[j] 必取 j(或者~j) 判定是否存在对每个变量的合法赋值,使所有约束都被满足判定方法:建立 2N 个点有向图,i 和 ~i 一般设为 i 和 i+N对于每个约束条件连2条有向边原创 2020-09-21 22:46:00 · 161 阅读 · 0 评论