还是不是很懂算法

先存一个模板先吧~~~

看的这篇学的--

http://www.renfei.org/blog/isap.html

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std; const int maxn = ;
const int INF = ( << ) - ; struct Edge{
int from,to,cap,flow;
}; vector<Edge> edges; int source; // 源点
int sink; // 汇点
int p[maxn]; // 可增广路上的上一条弧的编号
int num[maxn]; // 和 t 的最短距离等于 i 的节点数量
int cur[maxn]; // 当前弧下标
int d[maxn]; // 残量网络中节点 i 到汇点 t 的最短距离
bool visited[maxn]; int num_nodes; vector<int> G[maxn]; // 预处理, 反向 BFS 构造 d 数组
bool bfs()
{
memset(visited, , sizeof(visited));
queue<int> Q;
Q.push(sink);
visited[sink] = ;
d[sink] = ;
while (!Q.empty()) {
int u = Q.front();
Q.pop();
for ( int i = ;i < G[u].size();i++) {
Edge &e = edges[G[u][i]^];
if (!visited[e.from] && e.cap> e.flow) {
visited[e.from] = true;
d[e.from] = d[u] + ;
Q.push(e.from);
}
}
}
return visited[source];
} // 增广
int augment()
{
int u = sink, df = INF;
// 从汇点到源点通过 p 追踪增广路径, df 为一路上最小的残量
while (u != source) {
Edge &e = edges[p[u]];
df = min(df, e.cap - e.flow);
u = edges[p[u]].from;
}
u = sink;
// 从汇点到源点更新流量
while (u != source) {
edges[p[u]].flow += df;
edges[p[u]^].flow -= df;
u = edges[p[u]].from;
}
return df;
} int max_flow()
{
int flow = ;
bfs();
memset(num, , sizeof(num));
for (int i = ; i < num_nodes; i++) num[d[i]]++;
int u = source;
memset(cur, , sizeof(cur));
while (d[source] < num_nodes) {
if (u == sink) {
flow += augment();
u = source;
}
bool advanced = false;
for (int i = cur[u]; i < G[u].size(); i++) {
Edge& e = edges[G[u][i]];
if (e.cap > e.flow && d[u] == d[e.to] + ) {
advanced = true;
p[e.to] = G[u][i];
cur[u] = i;
u = e.to;
break;
}
}
if (!advanced) { // retreat
int m = num_nodes - ;
for ( int i = ;i < G[u].size();i++)
if (edges[G[u][i]].cap > edges[G[u][i]].flow)
m = min(m, d[edges[G[u][i]].to]);
if (--num[d[u]] == ) break; // gap 优化
num[d[u] = m+]++;
cur[u] = ;
if (u != source)
u = edges[p[u]].from;
}
}
return flow;
} void addedges(int from,int to,int cap){
edges.push_back((Edge){from,to,cap,});
edges.push_back((Edge){to,from,,});
int m = edges.size();
G[from].push_back(m-);
G[to].push_back(m-);
} void init(){
edges.clear();
for(int i = ;i < num_nodes;i++) G[i].clear();
} int main(){
int m;
while(scanf("%d %d ",&m,&num_nodes) != EOF){
init();
source = ; sink = num_nodes-;
for(int i = ;i < m;i++){
int u,v,c;
scanf("%d %d %d",&u,&v,&c);u--;v--;
addedges(u,v,c);
}
int res = max_flow();
printf("%d\n",res);
}
return ;
}

再存一个dinic的吧~~~

 #include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <iostream>
#include <algorithm>
using namespace std;
#define lp (p << 1)
#define rp (p << 1|1)
#define getmid(l,r) (l + (r - l) / 2)
#define MP(a,b) make_pair(a,b)
typedef long long ll;
typedef unsigned long long ull;
const int INF = << ;
const int maxn = ; int c[maxn][maxn],n,m,lev[maxn];
int st,ed; void Bfs(){
memset(lev,-,sizeof(lev));
queue<int> Q;
while(!Q.empty()) Q.pop();
Q.push(st);
lev[st] = ;
while(!Q.empty()){
int x = Q.front();Q.pop();
for(int i = ; i <= ed; ++i) if(lev[i] < && c[x][i] > ){
lev[i] = lev[x] + ;
Q.push(i);
}
}
} int Dfs(int p,int minc){
if(p == ed) return minc;
for(int i = ; i <= ed; ++i) if(lev[i] > lev[p] && c[p][i] > ){
int d = Dfs(i,min(c[p][i],minc));
if(d > ){
c[p][i] -= d;
c[i][p] += d;
return d;
}
}
return ;
} int Dinic(){
int max_flow = ,plus;
while(){
Bfs();
if(lev[ed] < ) break;
while((plus = Dfs(,INF)) > ) max_flow += plus;
}
return max_flow;
} int main(){
while(scanf("%d %d",&m,&n) != EOF){
st = ;ed = n;
memset(c,,sizeof(c));
for(int i = ;i <= m;i++){
int u,v,w;
scanf("%d %d %d",&u,&v,&w);
c[u][v] += w;
}
printf("%d\n",Dinic());
}
return ;
}

hdu 1532 Drainage Ditches 【ISAP 】的更多相关文章

  1. hdoj 1532 Drainage Ditches【最大流模板题】

    Drainage Ditches Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  2. poj 1273 && hdu 1532 Drainage Ditches (网络最大流)

    Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 53640   Accepted: 2044 ...

  3. HDU 1532 Drainage Ditches (网络流)

    A - Drainage Ditches Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64 ...

  4. POJ_1273 Drainage Ditches 【网络流】

    一.题面 Drainage Ditches 二.分析 网络流的裸题. 1 Edmonds-Karp算法 求解网络流其实就是一个不断找增广路,然后每次找到一条增广路后更新残余网络的一个过程. EK算法主 ...

  5. HDU 1532 Drainage Ditches 分类: Brush Mode 2014-07-31 10:38 82人阅读 评论(0) 收藏

    Drainage Ditches Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  6. POJ 1273 || HDU 1532 Drainage Ditches (最大流模型)

    Drainage DitchesHal Burch Time Limit 1000 ms Memory Limit 65536 kb description Every time it rains o ...

  7. HDU1532 Drainage Ditches 【最大流量】

    Drainage Ditches Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  8. HDU 1532 Drainage Ditches (最大网络流)

    Drainage Ditches Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) To ...

  9. hdu 1532 Drainage Ditches(最大流)

                                                                                            Drainage Dit ...

随机推荐

  1. Linux学习之路三:重要概念之Linux系统层次结构

    上图来自Unix编程圣经<APUE>英文第二版.如图,处于最中心的是系统内核,负责机器硬件资源管理,进程管理等:shell,函数库(值得记住的是C标准函数库)和某些应用程序均直接构建于内核 ...

  2. Jquery中拿到相同的对应的所有的标签

    在Jquery中相同的ID号不能用$()获得,即使是$().each()也不能获得所有的ID相同的元素,只能获得第一个匹配的元素. 比如: 以上4个div,如果用$("#jevoly&quo ...

  3. 微信二次认证 C#

    using Senparc.Weixin.Entities; using Senparc.Weixin.HttpUtility; using Senparc.Weixin.QY.AdvancedAPI ...

  4. Virtual servers on a Raspberry Pi with the light weight OS virtualization system Docker!

    转自:http://www.hyggeit.dk/2014/02/virtual-servers-on-raspberry-pi-with.html Virtual servers on a Rasp ...

  5. Codeforces 787A The Monster( 拓展欧几里德 )

    链接:传送门 题意:ok 题意略 思路:将问题转化成求 b + a * x = d + c * y,简单拓欧,但是需要注意的是 x >= 0 且 y >= 0 /************* ...

  6. ACM成长之路

    前几天在网上看到,转过来时刻督促一下自己. ACM队不是为了一场比赛而存在的,为的是队员的整体提高. 大学期间,ACM队队员必须要学好的课程有: l C/C++两种语言 l 高等数学 l 线性代数 l ...

  7. [模板]Link-Cut-Tree

    LCT模板. Orz了一下大佬的板子 Orz UPD(10.19):好像理解LCT了... LCT相当与把一个树剖分,分成实边和虚边,对于每一个实链用一个splay维护一下它的深度,然后当你想进行操作 ...

  8. 刷新linux硬盘存储接口

    #!/bin/bash for i in /sys/class/scsi_host/*; do echo "- - -" > $i/scan; done 简写 for i i ...

  9. LVM实践

    [root@ftp:/root] > fdisk -l Disk /dev/sda: 53.7 GB, 53687091200 bytes, 104857600 sectors Units = ...

  10. Django入门--模板标签、继承与引用

    一.模板标签 Django模板引擎提供的可以在模板中进行的各种逻辑操作,是函数调用的一种特殊形式,如循环.判断等功能,期语法规则为: {% tag %} content {% tag 参数1 参数2 ...