![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图论
傻子是小傲娇
acmer,摄影、钢琴、吉他爱好者
展开
-
prim 算法加模板
最小生成树的prim算法:1,在顶点中任取一点,加入集合U中;2,在集合外的点中找到离集合中的点中最近的点并构成路径,找到的点加入集合中;3,重复2过程到树构建完毕;举个栗子:从1开始,1加入集合U中,2,3,4,在集合外;选择离集合中点最近的点4,4加入集合中,2,3在集合外;选择离集合中点最近的点2,2加入集合中,3在集合外;选择离集合中点最近的点3原创 2017-10-07 18:38:31 · 242 阅读 · 0 评论 -
Dinic模板 (白书) 最大流
#include<algorithm>#include<cstring>#include<cstdio>#include<vector>#include<queue>using namespace std;const int maxn=1e3+10,INF=1e8;struct Edge{ int from,to,cap...原创 2018-07-29 15:09:22 · 179 阅读 · 0 评论 -
二分图匹配相关算法及例题分析 最大匹配匈牙利算法 最大权匹配KM算法(二分图类型问题汇总)
二分图最大匹配:问题描述:给出一个二分图,找一个边数最大的匹配。就是选择尽量多的边,使得选中的边中任意两条边均没有公共点。如果所有的点都是匹配点那就是一个完美匹配。解决方案:增广路定理增广路:从一个未匹配的点开始,依次走过未匹配边,匹配边,未匹配边,匹配边,。。。。。。 如果最后的终点是一个未匹配点(即最后一条边是一条未匹配边),那么这条路就是一条增广路。而将增广路上的未匹配边和匹配...原创 2018-08-10 20:16:27 · 2825 阅读 · 0 评论 -
拓扑排序模板加例题(拓扑排序问题汇总)
概念:一个有向无环图的拓扑序列是将图中的顶点排成一个线性序列,使得对于图中任意一对顶点u,v。若存在边<u,v>,则线性序列中u出现在v之前。算法实现:(1)若图中的点入度均大于0则不存在拓扑序列,否则进行第二步(2)取一个入度为0的点u并将其放置序列末尾(3)删除点u以及从u伸出的边,即将与u相连的点的入度减1(4)若图中还存在顶点,再从(1)开始模板:...原创 2018-08-14 11:17:16 · 1575 阅读 · 0 评论 -
网络流 (网络流问题汇总)
基本概念:网络:(1)有一个源点 s 和汇点 t 。 (2)每一条有向边e=(u,v)都有一个容量限制记做c(e)。流:定义在网络弧集上的实值函数 f ,满足三个性质 (1)对任意的弧 0 <= f <= c(e),容量限制。 (2)f(u,v) == -f(v,u),反对称性。 ...原创 2018-08-14 17:21:06 · 567 阅读 · 0 评论 -
最小生成树模板 加 例题分析 (最小生成树类型汇总)
最小生成树:对于一个无向连通图的最小生成树,选取边使得图中每个顶点连通且花费最小。在kruskal算法中,集合A是一个森林,加入集合A中的安全边总是图中连接两个不同连通分支的最小权边。prim算法中,集合A仅形成单颗树,添加入集合A的安全边总是连接树与一个不在树中的顶点的最小权边。kruskal在图G(v,e)上的运行时间取决于不相交集合数据结构是如何实现的,模板中采用路径优化的并查集,...原创 2018-08-02 20:40:33 · 1641 阅读 · 0 评论 -
最短路 Dijkstra Floyd Bellman-Ford SPFA模板及例题 (一次性搞定最短路类型的问题)
从城市A到城市B,有时候可以直达也可以途径其他城市到达,怎样选择最短的路径到达就是最短路问题。分为单源最短路(所有点到某一特定点的最短路径)和多源最短路(任意两点间的最短路径)。根据边的正负也可以分为带负权边和不带负权边的最短路。Dijkstra:用于解决不含负权边的单源最短路。基本思想:记S为已经找到到源点的最短路的点的集合,dis【i】表示顶点i到源点的最短距离。每次取不在S中的di...原创 2018-08-07 16:20:10 · 557 阅读 · 0 评论 -
BFS模板
#include<iostream>#include<cstring>#include<queue>using namespace std;const int M=50;int map[M][M],vis[M][M]; //map代表地图,vis用于标记是否已走过int bx,by,ex,ey,ans; //ans代表步数 bx,by起点坐标...原创 2017-08-03 17:31:24 · 246 阅读 · 0 评论 -
BZOJ1085 SCOI2005 骑士精神
(〃'▽'〃)φ(>ω<*)( ̄▽ ̄)~*最近学习搜索,看到这题就懵逼。网上就是各种A*搜索原理照着百度抄一遍贴一个代码,特别反感。什么启发式搜索什么的看了一堆概念也没明白,其实就是深度优先搜索加剪枝吗,说多辣么神 ̄へ ̄;1,要想知道最小步数,就得dfs枚举,但普通的dfs去漫无目的搜程序肯定会超时;2,明确一个剪枝策略,如果棋盘上有两个位置不符合条件至少需要一步...原创 2017-08-12 19:05:20 · 319 阅读 · 0 评论 -
dijkstra算法详解加例题分析 NOIP 2012 文化之旅
首先说一下什么叫单源最短路径问题:给定一个带权有向图G=(V,E),其中每条边的权是一个实数。另外,还给定V中的一个顶点,称为源。现在要计算从源到其他所有各顶点的最短路径长度。这里的长度就是指路上各边权之和。(摘自百科)这个题算是正儿八经的单源最短路径问题,因为图中边上的权值不可能为负值,所以采用dijkstra算法:dijkstra算法采用贪心策略,下面进行图解准备:...原创 2017-08-15 16:28:52 · 8114 阅读 · 1 评论 -
CSU 1808 地铁
最短路的变形问题普通的最短路,选取离出发点最近的一个点对其他的点进行优化本题则每次选取最短的边作为计算的单位 ,对边的两端点所连接两条边进行优化。最后在与结点n相连接的边中选择最小的即是答案 #include<cstdio> #include<cstring>#include<queue>#include<vector>#defi...原创 2018-07-17 21:29:14 · 163 阅读 · 0 评论 -
HDU-1285 确定比赛名次 拓扑排序
输出最小的注意一下,代码如下,水题不解释#include<iostream> #include<cstring>#include<cstdio>#include<vector>#include<queue>#include<stack> #define MM(a) memset(a,0,sizeof(a));us...原创 2018-06-09 20:36:07 · 170 阅读 · 0 评论 -
HUD-3342 Legal or Not 拓扑排序 kahn算法(基于入度) 的有向图判环
实现:1,没有前驱的结点输出 2 从图中删除该顶点和所有出边 重复1,2直至所有顶点都输出。或不存在无前驱的顶点,后者代表有向图是有环的。(有向图判环)#include<iostream>#include<cstring>#include<vector>#include<queue>using namespace std;const i...原创 2018-06-09 17:05:35 · 212 阅读 · 0 评论 -
Dijkstra算法模板
运用C++STL中list储存图原创 2017-10-12 20:11:03 · 259 阅读 · 0 评论 -
dijkstra preiority_queue优化 紫书学习
#include<bits/stdc++.h>using namespace std;const int maxn=1000+10;const int INF=1000000000;struct Edge{ int v,d; Edge(int v,int d):v(v),d(d){} bool operator<(const Edge&a) const{...原创 2018-05-08 21:33:01 · 174 阅读 · 0 评论 -
博客 UVA 247 calling circles floyd-warshall算法
题目大意描述,给出一条通话ben alex,表示本打给alex,及一条有向边。如果从ben可以到alex且alex可以到ben,则表示他们在一个电话圈内。每一行输出一组在一个电话圈内的人。基本思路:在图中记录下已经存在的单向边,通过三层循环枚举每个点即它们的中间节点。for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) for(...原创 2018-05-02 16:24:35 · 161 阅读 · 0 评论 -
bellman_ford 队列优化模板
#include<cstdio> #include<iostream>#include<vector>#include<cstring>#include<queue>using namespace std;const int INF=1000000000 +10;const int N=10000;int inq[N],...原创 2018-05-09 17:18:30 · 320 阅读 · 0 评论 -
博客 UVA 1395 Slim Span 图论
题目大意:给定一个图,求可以连通图的一组边中最大边减最小边最小的一个方案把边按权值大小进行排序,从小到大枚举L,对于每个L,从小到大枚举R,所有点连通时不再枚举关键函数:int solve(){ sort(edge+1,edge+1+m,cmp); int ans=INF; for(int L=1;L<=m;L++){ for(int i=1;i<...原创 2018-05-06 09:52:33 · 146 阅读 · 0 评论 -
博客 UVA 1151 Buy or Bulid 生成树 图论
题目大意:给定一个图和图的一些子网,求连接图的最小花费;连接图--- kruskal 并查集给定有子网---运用二进制枚举子网具体思路: 先求一次MST,得到需要的边。枚举子网,通过并查集将子网中的点加入,再去需要的边中找剩余所需要的cnt条边选择最小的ans;源代码:#include<cstdio>#include<cstring>#include<vector...原创 2018-05-07 20:33:16 · 181 阅读 · 0 评论 -
UVA 11624 Fire!BFS 图论
题目大意:有火,火会扩散,找出逃出迷宫的最短路两次Bfs,一次标记火的扩散,一次标记人的;人不会被火烧的判定条件是其步数小于火的步数。最后在迷宫的四条边界上找最小的ans#include<iostream>#include<cstring>#include<cstdlib>#include<cstdio>#include<queue&g...原创 2018-05-16 18:34:11 · 159 阅读 · 0 评论 -
UVA 10047 Monocycle
题目大意:求独轮车到达指定点的最短时间花费。步数应为5 的倍数。visit 仅仅表示到没到过? 应该是用来表示某个状态是否出现过,用四维数组表示,时间也一样。对于t的理解无论 前进还是左右转,时间都应该只加1;方 向: 0 1 3 2transfer 边界检查,答案更新// UVa10047 The Monocycle// Zhizhao Z...原创 2018-05-28 17:14:21 · 153 阅读 · 0 评论 -
UVa10054 The Necklace 欧拉回路
如果图G中的一个路径包括每个边恰好一次,则路径称为欧拉路径。如果一个回路是欧拉路径,则称为欧拉回路。(即起点终点相同的欧拉路)有欧拉回路的称为欧拉图,有欧拉路径但无欧拉回路的称为半欧拉图。无向图是欧拉图:当且仅当图的结点度数都为偶数。// UVa10054 The Necklace//zhizhao zhuo#include<iostream> #include<cstri...原创 2018-06-08 16:16:49 · 194 阅读 · 0 评论 -
NYOJ 92 图像有用区域 bfs
一开始思路异常清晰有木有(〃'▽'〃)结果就是wa;有点类似于求连通块,只是是求外面的连通块并进行标记,被标记的输出0,未被标记的输出原来的值;一个坑在于如果是这样的:外面的连通块被分成了几份,这样方法就失效了,我们在原来的图外加上一圈1就可以避免;完整代码:#include<cstring>#include<cstdio>#include...原创 2017-09-10 14:58:19 · 244 阅读 · 0 评论