图论算法
文章平均质量分 78
流苏贺风
这个作者很懒,什么都没留下…
展开
-
最大流,最小割刷题记录
T1 P2057 [SHOI2007] 善意的投票题目https://www.luogu.com.cn/blog/OnMyOwn/OnMyOwnhttps://www.luogu.com.cn/problem/P2057题目: 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉。对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神。虽然每个人都有自己的主见,但是为了照顾一下自己朋友的想法,他们也可以投和自己本来意愿相反的票。我们定义一次投票的冲突数为好朋友之间发生冲突的总数加上和所有和自己本来原创 2022-04-01 17:10:02 · 335 阅读 · 0 评论 -
费用流建模
网络最大流建模一,基础使用一(半),(同时)快解最大和最小费用二,带权二分图匹配三,网格图(极度稠密)建模核心:网格编号特例 1,点权不重复积累类型特例 2,边权不重复积累四,拆点1,一般思想2,最大权不相交路径五,上下界可行流一,基础使用基于EKEKEK 算法的实现,把 BFSBFSBFS可行流搜索函数改写成为 spfaspfaspfa 求解(最长)最短路扩展保证最大流的前提之下求解最小(大)费用0xcf 是最费用流,0x3f 是最小费用最大流加边传参: (端点,端点,流量上界,费用)v原创 2022-03-29 19:52:18 · 324 阅读 · 0 评论 -
最小割建模
最小割建模一,基础知识割割的性质最大流最小割定理二,理论常见技巧割的引申类型三,常见题型1,直接使用按照已知和未知区分两个集合按照定义找到(最小)割2,最大权闭合子图一,基础知识割SSS 是一个点集,保证 SSS 内一定有源点 sssTTT 是一个点集,保证 TTT 内一定有源点 ttt[S,T][S,T][S,T] 定义为一个割c(S,T)c(S,T)c(S,T) : 一个割的容量(不考虑反向边,只考虑从S出发的)f(S,T)f(S,T)f(S,T) : 一个割的流量(考虑到从T回来的退原创 2022-03-26 21:42:24 · 934 阅读 · 0 评论 -
网络最大流建模
网络最大流建模一,二分图建模1,最大匹配具体方案2,多重匹配二,有上下界网络流1,无源汇上下界可行流描述思路实现2,有源汇上下界最大流3,有源汇上下界最小流三,多源汇(参考多重匹配)四,最大流关键边思路五,最大流判定无向图网络流+二分答案六,拆点七,实践最大流问题一般求集合最优解,要求我们可以建立原问题和网络流集合的一一对应关系在后续的方案输出中,一定要记得那些是原图的边,那些是残余网络中的边,针对问题进行不同的分析对于所有可行解的集合P:1,对于流网络的所有可行流的集合,对于可行解中的一个解原创 2022-03-24 18:41:34 · 2075 阅读 · 0 评论 -
树上问题进阶
树上问题进阶一,树上启发式合并(DSU or GUNI)版本一:DFS序统计要素基础树上DFS线性增删DSU on tree版本二:树上递归统计基础树上DFS一,树上启发式合并(DSU or GUNI)离线算法,log复杂度优于树上莫队启发式框架,sizesizesize 小的子树多来几遍,大的子树争取只要一遍离线的框架是灵活的,统计答案的方法也是不同的From CF:方案起源给出一棵 n 个节点以 1 为根的树,节点 u 的颜色为 c(u),现在对于每个结点 u 询问 u 子树里一共出原创 2022-03-17 18:06:33 · 500 阅读 · 0 评论 -
LCA的求法和扩展
LCA的求法和扩展求解树上LCA(最近公共祖先)11,朴素dfs(形象的说就是:爬!)22,在线:倍增跃迁33,tarjan:离线使用LCA最长树边的长度求解树上LCA(最近公共祖先)先上个友链:来自队长的极佳blog11,朴素dfs(形象的说就是:爬!)思路:从两个点开始,先把深度更深的节点爬到两个节点相同的地步两个节点一起上移,直到同一深度过于直白,过程略22,在线:倍增跃迁规定:dep[0]=0dep[0]=0dep[0]=0(哨兵),默认lca第一个参的dep[x]dep[x]原创 2022-03-01 17:57:42 · 257 阅读 · 0 评论 -
网络流基础和最大流
文章目录一,网络流的基础概念EK 求最大流一,网络流的基础概念1.1 流网络,不考虑反向边1.2 可行流,不考虑反向边 1.2.1 两个条件:容量限制、流量守恒 1.2.2 可行流的流量指从源点流出的流量 - 流入源点的流量 1.2.3 最大流是指最大可行流1.3 残留网络,考虑反向边,残留网络的可行流f' + 原图的可行流f = 原题的另一个可行流 (1) |f' + f| = |f'| + |f| (2) |f'| 可能是负数1.4 增广路径1.5 割原创 2022-02-05 18:15:41 · 335 阅读 · 0 评论 -
树链剖分基础及进阶
树链剖分和树上启发式合并一,树链剖分1,重链剖分剖分过程索引过程板子:(小清新写法)树剖应用1,边权转点3,注意事项:一,树链剖分思路: 把树上问题转化到线段树上维护,树上转为序列1,重链剖分意义:重链剖分可以将树上的任意一条路径划分成不超过O(logn)O(log n)O(logn)条连续的链,每条链上的点深度互不相同(即是自底向上的一条链,链上所有点的 LCA 为链的一个端点)(一种求lca的新方法!!)重子节点 表示其子节点中子树最大的子结点。如果有多个子树最大的子结点,取其一;如果没有原创 2022-02-03 11:33:14 · 589 阅读 · 0 评论 -
拓扑排序和DAG性质
拓扑排序原理拓扑序的应用1,最大拓扑序和最小拓扑序原理拓扑序的应用1,最大拓扑序和最小拓扑序实现: 单纯的把队列换成小(大)根堆理由: 队列内的元素不是有序的,无需保证像BFS队列那种两段性和有序性,这个需要注意结合知识: 贪心P3243 [HNOI2015] 菜肴制作...原创 2021-09-28 22:31:50 · 395 阅读 · 0 评论 -
欧拉路和欧拉回路
欧拉路和欧拉回路一,无向图的欧拉二,有向图的欧拉一,无向图的欧拉二,有向图的欧拉原创 2021-09-23 21:40:53 · 631 阅读 · 0 评论 -
floyd算法的拓展和新定义用法
floyd算法的拓展和新定义用法一,全源最短路二,传递闭包三,环和最小环有时候题目给出就是邻接矩阵,赤裸裸的提示啊!一,全源最短路空间上限:tips:三层循环的顺序都是无所谓的,都可以跑出来正解预处理:出最大值二,传递闭包三,环和最小环...原创 2021-09-17 21:31:27 · 149 阅读 · 0 评论 -
最短路算法基础及拓展
提示:以下内容极度重要,有必要定期复习最短路一些针对性的性质基础模板算法1、Floyd算法2,bellman_ford算法3,dijkstra算法4 ,SPFA算法拓展实用算法有边数限制的最短路(bellman_flod)一些针对性的性质存在负权回路的话最短路径不一定存在基础模板算法1、Floyd算法我们已知,对于U 到 V 的最短路,手段只有两种:一,直接去二,借助中转节点思路:列举中转节点和直接去的路径比较,并选取最小值适用情况:任意节点的最短路,可以有环,但是负环不要有专原创 2021-08-06 17:50:21 · 368 阅读 · 0 评论 -
树上问题基础与进阶
树基础引树的有关概念树的直径1,朴素想法:2,树形DP:树上LCA(最近公共祖先)树的中心树的重心树链剖分树上启式合并引树的有关概念树的直径1,朴素想法:1,任取一个单点v\mathcal{v}v,dfs或者bfs一个离它最远的点u\mathcal{u}u,记录距离x\mathcal{x}x2,取u\mathcal{u}u点开始dfs,bfs,再找一个和它最远的非v\mathcal{v}v的点,记录距离y\mathcal{y}y(如果很不巧,最远的就是v\mathcal{v}v,那么y=0\m原创 2021-08-05 18:26:07 · 926 阅读 · 0 评论 -
生成树算法
最小生成树介绍一、prim算法二、Kruskal 算法介绍我们定义无向连通图的 最小生成树(Minimum Spanning Tree,MST)为边权和最小的生成树。注意:只有连通图才有生成树,而对于非连通图,只存在生成森林(好多生成树!)。图的形式不唯一,但是保证边权和最小!!一、prim算法基于邻接矩阵的算法,对于密集图更为方便,且复杂度达到O(N*N),且受到邻接矩阵特性的时间空间限制记录当前在树上的所有点,并维护该树(联通块)对外界的所有边的权值dist [ x ]增边:每.原创 2021-07-20 11:32:24 · 2424 阅读 · 0 评论 -
二分图的相关
二分图的相关简介一、判断二分图1.染色法(黑白染色法)2.奇环判定法二、二分图的最大匹配总结简介judge from name :可以一分为二的图就是二分图judge from math :一类特殊的图论模型,图中的每个节点分属与两个不同的点集 A,B,每一条边所连的两个节点,必然一个在 集合 A 中,一个在集合B 中二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集[公式],并且图中的每条边[公式]所关联的两个顶点[公式]和[公式.原创 2021-07-19 10:53:04 · 382 阅读 · 0 评论 -
Tarjan算法与连通性
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档Tarjan算法前言一、强连通的一些定义(KNOW)二、Tarjan算法(FIND)1.建图(方便后面看代码)2.tarjan的构成要素总结前言一、强连通的一些定义(KNOW)有向图的任意两个节点可以相互到达则称这两个点强连通(你能到我,我也能到你)如果图G 的任意两个节点强连通,那么G 就是一个强连通图有向图的极大强连通子图,称为强连通分量PS : 一个点也可以是强连通的图哦二、Tarjan算法(FIND)1.建图(原创 2021-06-09 17:08:04 · 672 阅读 · 0 评论 -
图的几种存储结构与方法(有向图+无向图)
图的几种存储结构:1、邻接矩阵2、链式前向星3、C++中vector的邻接表(一)邻接矩阵邻接矩阵是表示顶点之间相邻关系的矩阵。基本思想为:S[i][j]就可以表示i ->(到) j有一条边内部数值可以是边权或者bool标记有无上部为无向,下部为有向建图什么的不就有手!!就行!!使用实际或优劣对比:1、方便检查任意一对定点间是否存在边2、方便找任一顶点的所有“邻接点”(有边直接相连的顶点)3、方便计算任一顶点的度(你遍历就完了)对于无向图,邻接矩阵的第i行(或第i列)非零原创 2021-06-04 17:43:01 · 4979 阅读 · 0 评论