
图论
图论
SWUST_Vector
心怀希望的人最强大!!!
展开
-
最小费用最大流(板子)
最小费用最大流步骤:1.spfa()找最小费用的路径,并记录;2.利用最大流维护路径;模板题:洛谷P3381#include <bits/stdc++.h>using namespace std;const int N=5020;const int maxn=1e5+55;const int inf=0x3f3f3f3f;int dis[N],head[maxn],...原创 2020-03-13 18:21:52 · 176 阅读 · 0 评论 -
最大流dinic(模板)
最大流(Dinic)算法思想1.bfs()从起始节点开始找到点的深度,以离s起点最近为标准;2.dfs()找流量正向减去多少,反向加上多少;例题洛谷P3376*代码#include <bits/stdc++.h> //代码实现;using namespace std;const int N=1e5+55;const int inf=0x3f3f3f3...原创 2020-03-13 13:20:21 · 107 阅读 · 0 评论 -
带权二分图最优匹配KM算法
KM算法思想设有A[],B[]二分图,贪心的去找与A[i]的最大匹配,若没有找到就增加边,直到找到最优为止;实现步骤1.初始化l[],r[],数组,设置顶标,即找到与A[i]最大匹配的B[],存在l[]数组中,r[]数组初始化为0;2.dfs()寻找增广路径(最大匹配),和匈牙利类似;a.如果找到匹配点就进入下一匹配点;b.如果没有找到就增加新的路径;注意:在实现最小匹配时,将两...原创 2020-03-13 12:21:36 · 371 阅读 · 0 评论 -
匈牙利算法
匈牙利二分图:二部图又叫二分图,是图论中的一种特殊模型。设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图。最大匹配: 当节点之间匹配到最大时,为最大匹配;匈牙利算法思想通过不停地找增广路来增加匹配中的匹配边和匹配点。找不到增广路时,达到...原创 2020-03-03 18:22:12 · 122 阅读 · 0 评论 -
最小生成树prim(优先队列优化)算法+Kruskal算法
最小生成树1.prim算法算法思想:从任意一点出发,记录点的最小权值,每一次将最小边的结点标记一下,直到所有的点都被加到树里面。优先队列将边按从小到大的顺序排列,队首为最小的边。板子题:HUD-1863#include <iostream>#include <algorithm>#include <cstdio>#include <cstri...原创 2020-02-28 13:04:11 · 1056 阅读 · 0 评论 -
拓扑排序
拓扑排序算法思想1.入度数组ru[],记录是否存在环的情况;2.利用bfs()将入度为0的依次压入队列,将其所指向的点入度减一;3.在排序的过程中实现题目目的;例题HDU2647思路:1.先反向建边,x比y多则将y指向x;2.用一个val[]数组记录每一个点最大需要多花费的钱,依次向上更新,排序的过程就完成了,数据的更新;## 代码#include <bits/stdc...原创 2020-02-22 20:13:11 · 135 阅读 · 0 评论 -
最短路三种算法(Floyd+dij(优先队列优化版)+spfa)
单源最短路Floyd(纯暴力)思想:贪心+暴力枚举;看代码就能理解了void Floyd(){ //初始化dis[][]为很大的值; //注意在输入时需要将dis[x][y],dis[y][x],都录入; for(int k=1;k<=n;++k) for(int i=1;i<=n;++i) for(int j=1;j<=n;++j){ dis[i][j]...原创 2020-02-20 14:04:31 · 345 阅读 · 0 评论 -
最小生成树——模板
题目模版题很简单;一共有n个城市(从1开始编号),有m条路线,求出一条能连通n个城市的最小路线;分析首先需要找到一条能连通所有城市的路线;其次要保证这条路径的路程最短;算法简介常用两种算法:Kruskal 时间复杂度为eloge e为总共的边数。1.先将各个边的权值从小到大排序;2.按从小到大的顺序依次将边连接的点加入到一个集合中,并利用并查集确定一个祖先节点,使其中的...原创 2019-08-11 11:21:40 · 214 阅读 · 1 评论 -
最短路(dij+优先队列优化)模板
最短路径问题描述有n个城市,求s到e的最短路径;当n的值较小时,直接用(dij)算法没有问题,但是当数值较大或者访问过多时就需要优化;dij(算法)时间复杂度(n2);算法思想:贪心,从起点开始,不断的寻找不同点到起始点的最短距离;...原创 2019-08-10 17:49:41 · 606 阅读 · 0 评论