图论
璀璨的秋叶
我所热爱的
——美好的世界
展开
-
王者之剑
最小割模型在信息学竞赛中的应用, 最大独立集原创 2022-11-07 16:04:44 · 153 阅读 · 1 评论 -
牧师约翰最忙碌的一天 2-SAT
2-sat 运用原创 2022-10-24 15:47:22 · 190 阅读 · 0 评论 -
lca求次小生成树
lca求次小生成树原创 2022-07-12 20:16:15 · 142 阅读 · 0 评论 -
Tarjan 有向图强连通分量算法
Tarjan原创 2022-07-12 20:10:36 · 114 阅读 · 0 评论 -
次小生成树
次小生成树原创 2022-07-04 17:36:02 · 245 阅读 · 0 评论 -
匈牙利算法 二分图的最大匹配
#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N=600,M=10e6+10;int h[N],e[M],ne[M],idx;int uh[N],n1,n2,m;//uh[N]存储的是与他配对的点bool st[N];void add(int a,int b){ e[idx]=b; ne[idx]=...原创 2022-04-22 18:53:58 · 165 阅读 · 0 评论 -
染色法判定二分图
思路一:当图里有奇数边的环是该图不是二分图二: 把所有点染上两种不同颜色,如果是二分图则两种颜色分配一定均匀三: 染色过程中出现颜色冲突就不是二分图四:每一个节点的连通的下一个节点与该节点颜色相反五: 如果一个节点没有染色,就把他和他的所有连通点染色#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N=.原创 2022-04-21 19:52:44 · 322 阅读 · 0 评论 -
Prim算法求最小生成树
#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N=600,M=10e5+10;int h[N][N];int dist[M];bool st[N];int n,m;int prim(){ memset(dist,0x3f,sizeof dist);//所有点到集合距离初始化为无穷 int re...原创 2022-04-21 19:09:05 · 251 阅读 · 0 评论 -
Kruskal算法求最小生成树
思路:将所有边按权从大到小排序,枚举每条边,利用并查集判断点a,b是否连通(默认每个点都是离散的),如果不连通就连通a,b#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N=200110;int p[N],n,m;struct edge{ int a; int b; int w...原创 2022-04-21 18:51:54 · 404 阅读 · 2 评论 -
floyd算法(求多源最短路)
#include<iostream>#include<cstring>#include <algorithm>using namespace std;const int N=300,IN=10e8;int a[N][N];int n,m,k;void floyd(){ for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++...原创 2022-04-20 16:44:26 · 312 阅读 · 0 评论 -
spfa判断是否存在负环
#include <iostream>#include <cstring>#include <algorithm>#include <queue>using namespace std;const int N=100010;int h[N],e[N],w[N],ne[N],idx;bool st[N];int dist[N],cnt[N],n,m;void add(int a, int b, int c) // 添加一...原创 2022-04-21 14:49:54 · 69 阅读 · 0 评论 -
spfa求最短路
#include <iostream>#include <cstring>#include <algorithm>#include <queue>using namespace std;const int N=10e5+10,M=N;int h[N], e[M], w[M], ne[M], idx;int dist[N];bool st[N];int n,m;void add(int a,int b,int c){ ...原创 2022-04-20 16:31:29 · 76 阅读 · 0 评论 -
bellman_ford算法
#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 510, M = 100010;int dist[M],dcp[M];int n,m,k;struct Bell{ int a,b,c; }bell[M];int bellman(){ memset(dist,0x...原创 2022-04-20 15:07:33 · 93 阅读 · 0 评论 -
最短路径之dijkstra算法(单源最短路)(堆优化,适用于稀疏图)
#include <iostream>#include <cstring>#include <algorithm>#include <queue>#include <vector>using namespace std;const int N = 150000,M=N*2;typedef pair<int, int> PII;int h[N], e[M], w[M], ne[M], idx;int ...原创 2022-04-18 22:37:20 · 263 阅读 · 0 评论 -
最短路径之 Dijkstra算法(单源最短路)
一:算法框架使用临接矩阵来存储每两个点之间的距离,再使用一个数组存储源点到其他点的距离,使用一个bool数组来判断某个点是否已经被使用过,如果该点被遍历过那么该点到源的距离确定且最短;二:实现步骤1- 从源点开始依次选择离源点最近的点(包括源点但跳过)2-之后确定该点与源点的距离,bool数组对应的位置为真,3-从找到的点开始拓展该点到源点再到该点下一点的距离与该点下一点的距离到源点的距离,取最小值赋值给下一点对应的距离数组;4-重复前面步骤,直到结束;三,代码实现原创 2022-04-17 19:29:52 · 460 阅读 · 0 评论 -
图论 ----(图的遍历与拓扑序列)
目录树的重心(有向图的深度优先遍历)图中点的层次(有向图的宽度优先遍历)有向图的拓扑序列树的重心(有向图的深度优先遍历)//删除节点后最大连通块集合中的最小连通块#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 10e5+10,M=2*N;int h[N], e[M], ne[M],..原创 2022-04-17 15:04:07 · 409 阅读 · 0 评论