ACM图论
数论的分支,图论的技能树(学习中。。。)
TearNovice
欲登高而穷目,勿筑台于浮沙
展开
-
KM算法整理
#include<bits/stdc++.h> using namespace std; int a[maxn][maxn];///二分图左右点间边权 int ly[maxn];///右点顶标 int lx[maxn];///左点顶标 int match[maxn];///左点匹配的右点编号 bool visx[maxn];///左点标记 bool visy[maxn];///右点标记 int dfs(int x) { visx[x]=1; for(int i=1,i<原创 2021-04-15 19:07:44 · 160 阅读 · 0 评论 -
匈牙利算法整理
用途 求二分图的最大匹配 求二分图最小点覆盖集(=最大匹配数) 求二分图最小边覆盖集(=n-最大匹配数) 模板 int a[maxn][maxn];///二分图中左右点集之间的关系 bool vis[maxn];///当前左点访问过的右点 int match[maxn];///右点已匹配的左点 int dfs(int x)///匹配当前左点 { for(int i=1,i<=n;i++)///遍历所有右点 { if(a[x][i]&&!vis[i]原创 2021-03-20 09:51:25 · 75 阅读 · 0 评论 -
最短路之dijkstra及其堆优化
解决问题 dijkstra算法用来解决单源最短路径问题 通常来说就是求解一个图中两节点的最短路径(只适用于正权边) 算法思想 该算法的朴素想法是松弛的思想 即若 dis ( 1->3 ) = 7 dis ( 1->2 ) = 1 dis ( 2->3 ) = 1 则节点2的存在就可以对1,3松弛 在松弛完一个节点之后要选择尚未进行松弛的节点松弛,且要选择距起点距离最近的点【1】 代码实现 ///朴素dijkstra O(n^2+m) int g[N][N]; // 存储每条边 int d原创 2020-07-04 19:13:49 · 183 阅读 · 0 评论 -
图论基础:最小生成树
最小生成树,走向图论带师的第一步(OWO)=! 想来本蒟蒻在寒假集训时看到树,图就瑟瑟发抖,更别说最小生成树这个逼格满满的名字 当初的我看到长长的代码就萌生退意 但当我最近再看的时候,突然就顿悟了的说 耶 As we all know 最小生成树最常用的两个算法,Kruskal算法和Prim算法 Kruskal对边排序,所以适合稀疏图,prim对点操作,所以适合稠密图 其中,Kruskal算法是...原创 2020-04-11 21:56:00 · 114 阅读 · 0 评论 -
tarjan求强连通分量及缩点
蒟蒻求强连通分量 一、概念 什么是连通、强连通、弱连通? 这里有比较好理解的概念 连通:无向图中,从任意点i可以到达任意点j; 强连通:有向图中,从任意点i可以到达任意点j; 弱联通:把有向图看成无向图,从任意点i可以到达任意点j; 在有向图中成为强连通分量的条件较为苛刻 所以引入强连通分量这个概念 强连通分量:局部区域强连通 ...原创 2020-03-25 10:39:26 · 271 阅读 · 0 评论 -
蒟蒻存图
通往蒟蒻的最短路(存图篇) 今天蒟蒻想学最短路 但是本蒟蒻不会存图 于是只好学习一下怎么存图 1.不管不顾直接刚——临接矩阵 优点:简单、易行、直观 缺点:效率低、占用内存大 可解少量图最大 mp[1000][1000]; 代码就不上了,重要的在后面。 2.伸缩变换无穷尽——邻接表 作为还没学链表的蒟蒻,只学会了vector版邻接表 用结构体捆绑to和l,之后塞进起点对应的vector 能满足大多...原创 2020-03-07 23:19:46 · 142 阅读 · 0 评论