----图论
文章平均质量分 71
judyge
学习好 能力强。
展开
-
最短路专题
Dijkstra原始算法对于全体点集,划分为两个集合,一个为达成最短路的集合,一个反之 每次松弛操作为将当前离源点最近的点加入达成最短路的集合 根据新加入的点,维护未加入的点的最短距离 直至找到目标点加入 考虑和最小生成树Prime的相似之处复杂度 O(V^2),不可以处理负权图优化方式对于稀疏图,算法V^2的复杂度是过高的可以考虑在选择最近点的时候转载 2015-04-15 12:08:59 · 416 阅读 · 0 评论 -
Targan 算法[有向图强连通分量]
[有向图强连通分量]在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(stronglyconnected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。非强连通图有向图的极大强连通子图,称为强连通分量(strongly connected components)。下图中,子图{1,2,3,4}为一个强连通分量,因为顶点1,2,3,4两两可达。{5},{6}也转载 2015-05-10 14:21:37 · 1602 阅读 · 1 评论 -
poj2516 最小费用最大流
第一次见到这样的题,真的是看别人的思想然后看别人的代码了一晚上,先明白别人的代码的意思,但是不懂为什么那么写,然后画个图忽然就明白了,下面就是根据这道题最初最小费用最大流的分析!题目大意:给出n个客户对k个商品的需求量,又给出m个仓库对k个物品的存货量以及对k个物品从i仓库到j客户的一个物品的运费价格,让判断是否可以满足客户需求,然后就是如果满足求出最小的运费,是典型的最小费用最大流!转载 2015-05-10 15:03:36 · 354 阅读 · 0 评论 -
割点和割边
span style="font-size:14px;">struct node { int y,pre,i;//增加一个i是考虑重边的情况的 }; node a[N]; int pre[N],sign[N]; int dfn[N],low[N]; int tot,lenn; int n,m,len; void init() {转载 2015-05-10 15:08:45 · 362 阅读 · 0 评论 -
POJ图论题目
1062* 昂贵的聘礼 枚举等级限制+dijkstra1087* A Plug for UNIX 2分匹配1094 Sorting It All Out floyd 或 拓扑1112* Team Them Up! 2分图染色+DP1125 Stockbroker Grapevine FLOYD1135 Domino Effect 最短路1149* P转载 2015-05-10 15:53:24 · 581 阅读 · 0 评论 -
图像有用区域 bfs
图像有用区域时间限制:3000 ms | 内存限制:65535 KB难度:4描述“ACKing”同学以前做一个图像处理的项目时,遇到了一个问题,他需要摘取出图片中某个黑色线圏成的区域以内的图片,现在请你来帮助他完成第一步,把黑色线圏外的区域全部变为黑色。 图1转载 2015-05-01 15:11:00 · 505 阅读 · 0 评论 -
HDU 1879(最小生成树问题,Prim)
Problem Description省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。现得到城镇道路统计表,表中列出了任意两城镇间修建道路的费用,以及该道路是否已经修通的状态。现请你编写程序,计算出全省畅通需要的最低成本。 Input测试输入包含若干测试用例。每个测试用例的第1行转载 2015-05-05 20:18:24 · 505 阅读 · 0 评论 -
K短路【模板】
A*+SPFA算法: (1)将有向图的所有边正向、反向分别存入两个不同的边集(Edges,Edges1)中。用反向边集,以所求终点t为源点,利用SPFA或Dijkstra求解出所有点到t的最短路径,用Dist[i]数组来表示点i到点t的最短距离。 (2)建立一个优先队列,将源点s加入到队列中。 (3)从优先队列中取出最小的点p,如果点p == t,则计算t出队的次数。如果当前路径长度就转载 2015-05-13 20:56:17 · 388 阅读 · 0 评论 -
多源最短路径Floyd、Floyd求最小环【模板】
Floyd算法:用来找出每对点之间的最短距离。图可以是无向图,也可以是有向图,边权可为正,也可以为负,唯一要求是不能有负环。 1.初始化:将Map[][]中的数据复制到Dist[][]中作为每对顶点之间的最短路径的初值,Pre[i][j] = i 表示 i 到 j 路径中 j 的前一节点。 2. k 从 1 到 N 循环 N 次,每次循环中,枚举图中不同的两点 i,j,如果Dist[i][转载 2015-05-13 20:55:37 · 396 阅读 · 0 评论 -
二分图【模板】
二分图:原图G的顶点可以分类两个集合X和Y,所有的边关联的两个顶点恰好一个属于集合X,另一个属于集合Y,则称该图为二分图。 二分图匹配:给定一个二分图G,在G的一个子图M中,M的边集中的任意两条边都不依附于同一个顶点,即一个顶点最多只有一条边。则称M是一个匹配。 二分图最大匹配:图中包含边数最多的匹配称为图的最大匹配。 二分图完美匹配:如果所有点都在匹配边上,则称这个最大匹配是完美匹配转载 2015-05-13 20:56:18 · 398 阅读 · 0 评论 -
差分约束系统【模板】
差分约束系统:如果一个系统由n个变量和m个约束条件组成,其中每个约束条件形如 xj - xi例如如下的约束条件: X1 - X2 X2 - X5 X4 - X1 X5 - X3 全都是两个未知数的差小于等于某个常数(大于等于也可以,因为左右乘以-1就可以化成小于等于)。这样的不等式组就称作差分约束系统。 差分约束系统求解过程: 1.新建一个图,N个变量看作N个顶点,转载 2015-05-13 20:56:52 · 386 阅读 · 0 评论 -
最大流
span style="font-size:14px;">#define N 10000 int n,m,len,s,t; struct node{ int x,y,e,pre; }; node a[N*2]; int pre[N],que[N],stage[N]; void init() { len=0; s=0;转载 2015-05-10 15:09:29 · 385 阅读 · 0 评论 -
几大最短路径算法比较
用于解决最短路径问题的算法被称做“最短路径算法”,有时被简称作“路径算法”。最常用的路径算法有:Dijkstra算法、A*算法、SPFA算法、Bellman-Ford算法和Floyd-Warshall算法,本文主要介绍其中的三种。最短路径问题是图论研究中的一个经典算法问题,旨在寻找图(由结点和路径组成的)中两结点之间的最短路径。算法具体的形式包括:确定起点的最短路径问题转载 2015-05-10 14:13:43 · 425 阅读 · 0 评论 -
poj 2516 最小费用最大流
最佳匹配的题,m个仓库供应k种商品给n个商家,m*n条运输代价互异,求满足商家需求下的最小运输费用 显然,如果某种商品的供货量比需求大,肯定是无法达到要求的,所以开始要判别是否可以得到最佳匹配 这个题非常有启发意义,刚开始把k种商品一并考虑,tle了,想来也是,这样X集合中的点为m*k,Y中集合为n*k; 执行最小费用流这个复杂度为O(n^3)的算法在这个题目是不可以行的 考转载 2015-05-10 15:58:04 · 328 阅读 · 0 评论 -
网络最大流(dinic)模板
#include using namespace std;const int maxn=150000;const int maxm=2000000;const int inf=1<<30;struct edge{int from, to, val, next;}e[maxm];;int v[maxn], que[maxn], dis[maxn],len;void init(){转载 2015-04-16 08:36:41 · 494 阅读 · 0 评论 -
网络最大流(SAP)模板
#include #include const int inf=1<<30;#define MAXM 2000 struct edge{ int from, to, val, next;}e[MAXM*MAXM];int v[MAXM];int n,m,len,st,ed; //st = 源点 ed = 汇点void init(){ len = 0; me转载 2015-04-16 08:35:58 · 440 阅读 · 0 评论 -
二分匹配(匈牙利算法)模板
#include #include using namespace std;#define MAX 1005vector > map; int mark[MAX];bool flag[MAX];int nm,num;bool dfs(int pos) //搜pos点是否存在增广路{ int i,pre,tp; int len=map[pos].size(); f转载 2015-04-16 08:43:09 · 390 阅读 · 0 评论 -
简述二分图
二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图。简而言之,就是顶点集V可分割为两个互不相交的子集,并且图中每条边依附的两个顶点都分属于这两个互不相交的子集。区别二分图,关键是看点集是否能分转载 2015-04-15 12:13:05 · 439 阅读 · 0 评论 -
网络流之——最小费用最大流
学习最小费用最大流前,需要学习最大流算法。在最大流算法中,没有考虑边的费用问题。在MinCostMaxFlow中,引入了费用的概念:cij表示边(i,j)单位流量的费用。在满足流量=v(f)的同时,并且要求费用最少。 最小费用最大流的迭代算法: 1.求出从s到t的最小费用通路(spfa)和通路的最大流量f。 2.让通路上的边(i,j)流量减去f;添加反向边转载 2015-05-10 14:58:52 · 511 阅读 · 0 评论 -
二分图最大匹配,点的最小覆盖,最小路径覆盖
vectorint>vec[N]; bool vis[N]; int n,k; int next[N+10]; bool find(int t) { rep(i,vec[t].size()) { int m=vec[t][i]; if(vis[m]==false) {转载 2015-05-10 15:10:48 · 366 阅读 · 0 评论 -
二分图的最大匹配—匈牙利算法
【基本概念】:二分图:二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图。 无向图G为二分图的充分必要条件是,G至少有两个顶点,且其所有回路的长度均为偶数。 最大匹配:转载 2015-05-10 15:14:26 · 350 阅读 · 0 评论 -
POJ 2186 popular cow 有向图的强联通问题 Tarjan算法
参考:http://hi.baidu.com/1093782566/blog/item/e5a0e9229913bd048b82a175.htmlhttp://www.cppblog.com/IronOxide/archive/2010/08/16/123622.html?opt=admin题目简述:n头奶牛,给出若干个欢迎关系a b,表示a欢迎b,欢迎关系是单转载 2015-05-10 14:22:26 · 528 阅读 · 0 评论 -
差分约束系统详解
差分约束系统X1 - X2 X1 - X5 X2 - X5 X3 - X1 X4 - X1 X4 - X3 X5 - X3 X5 - X4 不等式组(1) 全都是两个未知数的差小于等于某个常数(大于等于也可以,因为左右乘以-1就可以化成小于等于)。这样的不等式组就称作差分约束系统。 这个不等式组要么无解,要么就有无数组解。因为如果有一组转载 2015-05-10 15:02:21 · 322 阅读 · 0 评论 -
二分图的最大带权匹配
KM算法是求最大权完备匹配,如果要求最小权完备匹配怎么办?方法很简单,只需将所有的边权值取其相反数,求最大权完备匹配,匹配的值再取相反数即可。KM算法的运行要求是必须存在一个完备匹配,如果求一个最大权匹配(不一定完备)该如何办?依然很简单,把不存在的边权值赋为0。KM算法求得的最大权匹配是边权值和最大,如果我想要边权之积最大,又怎样转化?还是不难办到,每条边权取自然对数,然后求最大和权匹配转载 2015-05-10 15:10:13 · 657 阅读 · 0 评论 -
程序基本功之遍历二叉树
最近工作忙,没时间思考复杂的问题了。正好要招人就得有面试的嘛,自己也温习一下,要不然怎么去问别人。今天复习一下二叉树的遍历,前序(pre-order,NLR)、中序(in-order,LNR)、后序(post-order,LRN)、层序(level-order),用和不用递归。概念就不用多解释了,前、中、后是指根结点的访问时机,在左、右子树之前、中间、或之后。层序就是从根结点开始从转载 2015-05-06 15:02:04 · 535 阅读 · 0 评论