网络流
文章平均质量分 76
Ac_Wind
这个作者很懒,什么都没留下…
展开
-
Poj 1511- Invitation Cards(Spfa+邻接表)
这题第一感觉就是Floyd:方便快捷,也很直接。sum+=d[1][i]+d[i][1] (i---- 1->n);但显然悲剧超时,然后就想到Floyd的优化算法Spfa。一般的都会用上队列,比如vector确实好用,但这题太坑,卡vector超时,然后听取了其他人的想法用邻接表解决了。#include#define MAXN 1000010#define MOD 1000007原创 2013-07-07 10:16:32 · 845 阅读 · 0 评论 -
Spfa用法简介
SPFA(Shortest Path Faster Algorithm)是Bellman-Ford算法的一种队列实现,减少了不必要的冗余计算。算法大致流程是用一个队列来进行维护。 初始时将源加入队列。 每次从队列中取出一个元素,并对所有与他相邻的点进行松弛,若某个相邻的点松弛成功,则将其入队。 直到队列为空时算法结束。这个算法,简单的说就是队列优化的bellman-ford,利用了转载 2013-07-07 09:00:28 · 836 阅读 · 0 评论 -
Poj3308 Paratroopers(最小割)
其实最开始看没啥思路,还以为是DP什么的。冷静分析一下,我们可以把横竖行分开来看,那么有一个伞兵就在左右脸上一条线(流量无穷),这不是个二分图吗?!然后就很自然想到加上一个源点一个汇点就成了网络流求最小割,也就是最大流的问题上来。NICE。#include "stdio.h"#include "iostream"#include "stdlib.h"#include "queue"原创 2013-07-09 21:20:46 · 796 阅读 · 0 评论 -
网络流之SAP算法
在SAP算法中,我们定义每个顶点的距离标号(Distance Labels),即残留网络中这个点到汇点的距离。然后,我们只在距离标号相邻的点间寻找增广路径。如果从一个点出发没有容许边,就对重标记并回溯(类似预流推进)。首先介绍一些定义:残留容量:容量-流量。即,残留容量r[i,j]=c[i,j]-f[i,j]。如果只求流值,则在网络流算法中只需记录残量,而不必记录容量和流量。残留边转载 2013-07-10 21:36:39 · 856 阅读 · 0 评论 -
网络流之Dinic算法
Dinic 算法的基本步骤为:1) 计算残余网络的层次图。我们定义 h[i] 为顶点 i 距离源 S 所经过到最小边数,求出所有顶点的 h 值,h[] 值相同的顶点属于同一层,这就是网络的层次图。2) 在层次图上进行 BFS 增广,直到不存在增广路径。这时求得的增广路径上顶点是分层的,路径上不可能存在两个顶点属于同一层,即 h[i]== h[j] (i!= j )。同时,求得层次图转载 2013-07-10 21:08:53 · 803 阅读 · 0 评论 -
hdu 1054 最小点覆盖
这题就是运用到了二分图的三个重要结论之一:最小点覆盖数: 最小覆盖要求用最少的点(X集合或Y集合的都行)让每条边都至少和其中一个点关联。可以证明:最少的点(即覆盖数)=最大匹配数最小路径覆盖=最小路径覆盖=|N|-最大匹配数用尽量少的不相交简单路径覆盖有向无环图G的所有结点。解决此类问题可以建立一个二分图模型。把所有顶点i拆成两个:X结点集中的i和Y结点集中的i',如果有边i->j,则原创 2014-03-01 14:38:50 · 1008 阅读 · 0 评论