随笔分类 -  图论

图论模板和刷题
摘要:最短路 单源最短路 Dijkstra算法 边权非负 # include <bits/stdc++.h>using namespace std;​typedef long long LL;struct Dijkstra{ #define MAXN 1234 #define INF 0x3f3f3f3f 阅读全文
posted @ 2022-02-27 14:07 fengzlj 阅读(44) 评论(0) 推荐(0) 编辑
摘要:最小生成树 一、Krustral 克鲁斯卡尔算法 /* https://vjudge.net/problem/HDU-1863 复杂度 E*log(E) 适用于稀疏图*/# include <bits/stdc++.h>using namespace std;​const int MAXN=100+ 阅读全文
posted @ 2022-02-27 14:06 fengzlj 阅读(110) 评论(0) 推荐(0) 编辑
摘要:二分图带权最大匹配(二分图最优匹配) KM算法在稠密图上效率高于费用流。局限性:只能在满足“带权最大匹配一定是完备匹配”的途中正确求解。 若相等子图中存在完备匹配,则这个完备匹配就是二分图的带权最大匹配。 KM算法 O(n^4) 1-N 和 0 -N 全局一致; u和v一致; # include < 阅读全文
posted @ 2022-02-27 14:03 fengzlj 阅读(67) 评论(0) 推荐(0) 编辑
摘要:拓扑排序 # include <bits/stdc++.h>using namespace std;​const int LEN_of_Node=1e4+100;const int LEN_of_Edge=2e4+100;int cnt;int n,m;int num;struct Edge{ in 阅读全文
posted @ 2022-02-27 13:49 fengzlj 阅读(139) 评论(0) 推荐(0) 编辑
摘要:无向图的割点和桥 1.割点 # include <bits/stdc++.h>using namespace std;​const int MAXN=2e4+100;vector<int> G[MAXN];int dfn[MAXN],iscut[MAXN],low[MAXN]; //iscut[i] 阅读全文
posted @ 2022-02-27 13:40 fengzlj 阅读(51) 评论(0) 推荐(0) 编辑
摘要:无向图的双连通分量 1.点双连通分量 v-DCC 性质:1.顶点数不超过2 2.图中任意两点都同时包含在至少一个简单环中 3.如果该分量里有一个奇圈,那么其他所有点也必然在某个奇圈中;含有一个奇圈的充要条件是该分量不是二分图。 注意:割点的bccno可以是有多种选择,不一定是想要的那一个 最小方案数 阅读全文
posted @ 2022-02-27 00:20 fengzlj 阅读(159) 评论(0) 推荐(0) 编辑
摘要:有向图的强连通分量 1.Tarjan O(V+E) dfn[u]表示dfs时达到顶点u的次序号(时间戳),low[u]表示以u为根节点的dfs树中次序号最小的顶点的次序号,所以当dfn[u]=low[u]时,以u为根的搜索子树上所有节点是一个强连通分量。 先将顶点u入栈,dfn[u]=low[u]= 阅读全文
posted @ 2022-02-27 00:04 fengzlj 阅读(67) 评论(0) 推荐(0) 编辑
摘要:网络流之最大流 流函数三大性质: 1)容量限制:f(x,y) <= c(x,y) 2)斜对称:f(x,y)=-f(y,x) 3)流量守恒:x!=S,x!=T,Σf(u,x)=Σf(x,v) c(x,y)=0说明该条边不在图中,同时f(x,y)<=0 最大流 EK算法 O(ve^2) 10^3--10 阅读全文
posted @ 2022-02-26 23:38 fengzlj 阅读(15) 评论(0) 推荐(0) 编辑
摘要:图论结论 1.任意一个有6个顶点的简单图或其补图一定包含一个三角形(Ramsey定理) 网络流之最大流 流函数三大性质: 1)容量限制:f(x,y) <= c(x,y) 2)斜对称:f(x,y)=-f(y,x) 3)流量守恒:x!=S,x!=T,Σf(u,x)=Σf(x,v) c(x,y)=0说明该 阅读全文
posted @ 2022-02-26 23:38 fengzlj 阅读(81) 评论(0) 推荐(0) 编辑
摘要:无向图的联通分量 const int MAXN=1e4+100;vector<int> G[MAXN];bool vis[MAXN];void dfs(int u){ for(int i=0;i<G[u].size();++i){ if(!vis[G[u][i]]){ vis[G[u][i]]=1; 阅读全文
posted @ 2022-02-26 23:38 fengzlj 阅读(70) 评论(0) 推荐(0) 编辑
摘要:二分图最大匹配 增广路的性质: 1).长度是奇数 2).路径上第1,3,5...,len条边是非匹配边,第2,4,6,...,len-1条边是匹配边。 二分图的一组匹配S是最大匹配,当且仅当图中不存在S的增广路 相关定理: 完备匹配:给定一张二分图,其左部、右部节点数相同,均为N个节点。如果该二 分 阅读全文
posted @ 2022-02-26 23:37 fengzlj 阅读(74) 评论(0) 推荐(0) 编辑
摘要:数据结构和图论易错点 Edge &t=egde[i] 初始化是否完全 空间是否开够了 是否需要LL 阅读全文
posted @ 2022-02-26 23:36 fengzlj 阅读(26) 评论(0) 推荐(0) 编辑
摘要:三种存图方式 1.邻接矩阵 2.邻接表 邻接表是一种对于每个顶点,用链表来存储以该点为起点的边的数据结构。 # include <bits/stdc++.h>using namespace std;​const int MAXN=250;struct Edge{ int to,w,next;}edg 阅读全文
posted @ 2022-02-26 23:35 fengzlj 阅读(190) 评论(0) 推荐(0) 编辑
摘要:树上差分 # include <bits/stdc++.h>using namespace std;​const int MAXN=1e5+100;struct Edge{ int to,w,next;}edge[MAXN<<1];int head[MAXN];int tot=0;void add( 阅读全文
posted @ 2022-02-26 23:35 fengzlj 阅读(57) 评论(0) 推荐(0) 编辑
摘要:树的直径 1.树形DP求树的直径 void dp(int x){ v[x]=1; for(int i=head[x];~i;i=edge[i].next){ Edge e=edge[i]; if(v[e.to]) continue; dp(e.to); ans=max(ans,d[x]+d[e.to 阅读全文
posted @ 2022-02-26 23:35 fengzlj 阅读(68) 评论(0) 推荐(0) 编辑
摘要:二分图染色判断 判断图中不存在奇数环 O(n+m) //P1155# include <bits/stdc++.h>using namespace std;​const int MAXN=1e3+100;vector<int> G[MAXN];int color[MAXN];int bipart(i 阅读全文
posted @ 2022-02-26 23:34 fengzlj 阅读(174) 评论(0) 推荐(0) 编辑
摘要:LCA 1.向上标记 2.树上倍增 O((n+m)log n) # include <bits/stdc++.h>using namespace std;​const int MAXN=5e4+100;struct Edge{ int next,to,w;}edge[MAXN<<1];int tot 阅读全文
posted @ 2022-02-26 23:33 fengzlj 阅读(21) 评论(0) 推荐(0) 编辑
摘要:A* 定点第k短路 # include <bits/stdc++.h>using namespace std;​typedef long long LL;const int MAXN=1e3+100,MAXM=1e5+100;#define INF 123456789int n,m,s,t,k;st 阅读全文
posted @ 2022-02-26 23:32 fengzlj 阅读(46) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示