
图论
文章平均质量分 66
hhh
proudzhao
这个作者很懒,什么都没留下…
展开
-
树上启发式合并 (dfs on tree)
树上启发式合并原创 2022-10-10 17:46:13 · 157 阅读 · 0 评论 -
网络流专题练习
网络流之二分图匹配、关键边、最大流判定、拆点原创 2021-12-03 13:46:15 · 275 阅读 · 0 评论 -
[模版] spfa费用流
#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <set>#include <map>#include <queue>#include <stack>#include <vector>#include <string>#include <algorith.原创 2021-11-30 21:24:48 · 265 阅读 · 0 评论 -
最小权点覆盖与最大权独立集
文章目录一、概念二、最小权点覆盖求法2.1 建图方法2.2 证明简单割与点覆盖集的对应关系三、最大权独立集求法一、概念最小权点覆盖:选出图中的一些点构成一个点集,使得该点集内的点可以覆盖原图中所有边,覆盖是指对于任意一条边,其两端的端点至少有一个是被选中的。那么对于每个点我们给他一个权值,所有点覆盖集中,总权值和最小的一个就是所说的最小权点覆盖集。最大权独立集:独立集是和点覆盖集对偶的一个概念,独立集是指一个点集,点集中任意两点之间是不存在边的,也就是点和点之间相独立,并不相连。而在所有独立集中,原创 2021-11-29 22:21:12 · 1635 阅读 · 0 评论 -
最大密度子图
文章目录一、概念二、求法1、问题转化2、求解过程一、概念对于一个图G<V,E>G<V,E>G<V,E>,选出其一个子图G′<V′,E′>G^{'}<V^{'},E^{'}>G′<V′,E′>。要求如果选择了一条边,那么该边的端点也要被选,同时要使得∣E′∣∣V′∣\frac {|E^{'}|}{|V^{'}|}∣V′∣∣E′∣最大。该图就是最大密度子图。二、求法1、问题转化要求∣E′∣∣V′∣\frac {|E^{'}|原创 2021-11-24 20:42:18 · 444 阅读 · 0 评论 -
无向图的双连通分量
文章目录定义例题冗余路径电力矿场搭建定义在一张连通的无向图中,对于两个点u和v,如果无论删去哪条边(只能删去一条)都不能使得它们不连通,则称u和v边双连通。在一张连通的无向图中,对于两个点u和v,如果无论删去哪个点(只能删去一个,且不能删去u和v自己)都不能使得它们不连通,则称u和v点双连通。边双连通具有传递性,即若x,y边双连通,y,z边双连通,则x,z边双连通。点双连通不具有传递性。割点:对于一个无向图,如果把一个点删除后这个图的极大连通分量数增加了,那么这个点就是这个图的割点。割边:对于原创 2021-11-15 21:15:47 · 571 阅读 · 0 评论 -
[模版]dinic算法
算法流程与EK算法类似,相当于对EK算法做了一些优化。EK算法每次只寻找一条增广路,dinic算法每次寻找多条增广路。时间复杂度:O(n2m)O(n^2m)O(n2m)然而实际运行效率是很快的,一般100001000010000~100000100000100000的问题规模都没问题。模版:#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#inclu原创 2021-10-10 10:37:45 · 139 阅读 · 0 评论 -
[模版]EK算法
算法步骤:从源点开始,用BFS找一条最短的增广路径,计算该路径上的残量最小值,累加到最大流值;沿着该路径修改流量值,实际是修改是残量网络的边权;重复上述步骤,直到找不到增广路时,此时得到的流就是最大流。时间复杂度:O(nm2)O(nm^2)O(nm2),nnn是点数,mmm是边数。但实际情况中,EK算法的复杂度远低于理论上的复杂度,一般100010001000~100001000010000的规模EK算法都可以解决。模板题:Acwing2171.EK求最大流#include <i原创 2021-10-09 19:11:40 · 280 阅读 · 0 评论 -
学习笔记:二分图
二分图又称作偶图(图中不含奇数环),是图论中的一种特殊模型。设 G=(V,E) 是一无向图,若顶点 V 可分割为两个互不相交的子集 (A,B),且图中的每条边(i,j)所关联的两个顶点 i 和 j 分属这两个不同的顶点集 (i ∈ A,j ∈ B),则称图 G 为一二分图。简单来说,就是顶点集 V 可分割为两个互不相交的子集,且图中每条边依附的两个顶点都分属于这两个互不相交的子集,两个子集内的顶点不相邻。当图中的顶点分为两个集合,使得第一个集合中的所有顶点都与第二个集合中的所有顶点相连时,此时是一特殊原创 2021-02-16 15:26:46 · 430 阅读 · 0 评论 -
学习笔记:拓扑排序
对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。有向图的拓扑序列:给定一个n个点m条边的有向图,点的编号是1到n,图中可能存在重边和自环。请输出任意一个该有向原创 2021-02-06 14:38:53 · 378 阅读 · 0 评论 -
学习笔记:最短路[模版总结]
最短路算法分为两大类:1、单源最短路,常用算法有:(1) dijkstra,只适用于正边权图。在稠密图上的时间复杂度是 O(n^2),稀疏图上的时间复杂度是 O(mlogn)。(2) spfa,不论边权是正的还是负的,都可以做。算法平均时间复杂度是 O(km),k是常数2、多源最短路,一般用floyd算法。时间复杂度是 O(n^3)。算法一:dijkstra算法模板题:给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为正值。请你求出1号点到n号点的最短距离,如果无法从1号点走原创 2021-02-08 15:17:46 · 197 阅读 · 0 评论 -
学习笔记:树的重心
给定一颗树,树中包含n个结点(编号1~n)和n-1条无向边。请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。输入格式第一行包含整数n,表示树的结点数。接下来n-1行,每行包含两个整数a和b,表示点a和点b之间存在一条边。输出格式输出一个整数m,表示将重心删除后,剩余各个连通块中点数的最大值。思路:枚举每一个点被删除后的情况,计算联通块中的点数,在树中删除一个原创 2021-02-06 14:48:01 · 153 阅读 · 0 评论 -
学习笔记:最小生成树
算法一:Prim算法给定一个n个点m条边的无向图,图中可能存在重边和自环,边权可能为负数。求最小生成树的树边权重之和,如果最小生成树不存在则输出impossible。给定一张边带权的无向图G=(V, E),其中V表示图中点的集合,E表示图中边的集合,n=|V|,m=|E|。由V中的全部n个顶点和E中n-1条边构成的无向连通子图被称为G的一棵生成树,其中边的权值之和最小的生成树被称为无向图G的最小生成树。输入格式第一行包含两个整数n和m。接下来m行,每行包含三个整数u,v,w,表示点u和点v之间原创 2021-02-08 16:58:18 · 145 阅读 · 0 评论 -
学习笔记:树形dp
1、没有上司的舞会Ural大学有N名职员,编号为1~N。他们的关系就像一棵以校长为根的树,父节点就是子节点的直接上司。每个职员有一个快乐指数,用整数 Hi 给出,其中 1≤i≤N。现在要召开一场周年庆宴会,不过,没有职员愿意和直接上司一起参会。在满足这个条件的前提下,主办方希望邀请一部分职员参会,使得所有参会职员的快乐指数总和最大,求这个最大值。输入格式第一行一个整数N。接下来N行,第 i 行表示 i 号职员的快乐指数Hi。接下来N-1行,每行输入一对整数L, K,表示K是L的直接上司。原创 2021-02-22 22:27:47 · 87 阅读 · 0 评论 -
bfs之八数码
在一个 3×3 的网格中,1∼8 这 8 个数字和一个 x 恰好不重不漏地分布在这 3×3 的网格中。例如:1 2 3x 4 67 5 8在游戏过程中,可以把 x 与其上、下、左、右四个方向之一的数字交换(如果存在)。我们的目的是通过交换,使得网格变为如下排列(称为正确排列):1 2 34 5 67 8 x例如,示例中图形就可以通过让 x 先后与右、下、右三个方向的数字交换成功得到正确排列。交换过程如下:1 2 3 1 2 3 1 2 3 1 2 3x 4 6 4原创 2021-03-21 20:43:39 · 268 阅读 · 1 评论 -
spfa判断负环回路
经典例题:虫洞#include<cstdio>#include<cmath>#include<cstring>#include<iostream>#include<map>#include<stack>#include<queue>#include<string>#include<vector>#include<algorithm>#define ll long l原创 2021-04-19 22:45:48 · 124 阅读 · 0 评论 -
严格次小生成树
求解步骤:1、先求一遍最小生成树,并把所有边标记为树边与非树边。2、按最小生成树(即树边)建图。3、预处理F[x, k], d1[x, k], d2[x, k] F[x, k]:从点x向根走2^k步到达的节点 d1[x, k]:从点x向根走2^k步经过的所有边的最大值 d2[x, k]:从点x向根走2^k步经过的所有边的次大值4、枚举每一条非树边{a, b, c} 在树中从a到b的路径中找到最大边权与次大边权与该非树边交换#include<cstdio>#include&.原创 2021-04-26 21:01:39 · 136 阅读 · 0 评论 -
最近公共祖先(LCA)
求法一:树上倍增法设F[x, k]表示x的2k辈的祖先,即从x先根节点走2k步到达的节点。特别的,日狗该节点不存在(即超出了根节点),则另F[x, k] = 0.F[x, 0]就是x的父节点。除此之外,对于任意的和合法k,都有F[x, k] = F[ F[x, k-1], k - 1]。这是类似于一个动态规划的过程,“阶段”就是节点的深度。因此,我们可以对树进行广度优先遍历,按照层次顺序,在节点入队之前,计算它在F数组中的相应的值。以上部分是预处理,时间复杂度为O(nlogn),之后可以多次对不同的原创 2021-04-25 17:38:30 · 130 阅读 · 0 评论