题意:现在有m个池塘(从1到m开始编号,1为源点,m为汇点),及n条有向水渠,给出这n条水渠所连接的点和所能流过的最大流量,求从源点到汇点能流过的最大流量

Dinic

 #include<iostream>
#include<cstring>
#include<algorithm>
#include <cstdio>
#include <queue>
using namespace std;
const int N = ;
const int INF = 0x3f3f3f3f;
int m,n,tot;
int head[N],level[N];
struct node
{
int t,next,w;
}edge[N<<]; void init()
{
tot=-;
memset(head,-, sizeof(head));
} void add(int s,int t,int w)
{
edge[++tot].t=t,edge[tot].w=w,edge[tot].next=head[s],head[s]=tot;
edge[++tot].t=s,edge[tot].w=,edge[tot].next=head[t],head[t]=tot;
} bool bfs()
{
memset(level,,sizeof(level));
queue<int> q;
while(!q.empty())q.pop();
q.push();
level[]=;
while(q.size())
{
int u=q.front();q.pop();
for(int i=head[u];i!=-;i=edge[i].next)
{
if(edge[i].w>&&level[edge[i].t]==)
{
q.push(edge[i].t);
level[edge[i].t]=level[u]+;
}
if(level[m]!=)return ;
}
}
return ;
} int dfs(int s,int t, int flow)
{
if(s==t)return flow;
for(int i=head[s];i!=-;i=edge[i].next)
{
if(edge[i].w>&&level[edge[i].t]==level[s]+)
{
int k = dfs(edge[i].t,t,min(flow,edge[i].w));
if(k>)
{
edge[i].w-=k;
edge[i^].w+=k;
return k;
}
}
}
return ;
}
//
void dinic()
{
int flow=;
while(bfs()) // 寻找最短增广路,分层图
{
int f=;
while((f=dfs(,m,INF))>)flow+=f; // 在分层图上增广
}
cout<<flow<<endl;
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
init();
while(n--)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
add(a,b,c);
}
dinic();
}
return ;
}

建图的另一种方法,上面有两种邻接表的方法,一种是单纯用数组模拟,可以运用异或操作反向边;另一个是vector模拟,反向边做特别记录

 struct edge
{
int to,cap,rev;// 反向边
};
vector<edge> g[maxn];
int level[maxn]; void add_edge(int from,int to,int cap)
{
//最后一个元素是反向边的索引,便于快速查找
g[from].push_back((edge){to,cap,g[to].size()});
g[to].push_back((edge){from,,g[from].size()-});
}

Ford_Fulkerson

POJ 1273 Drainage Ditches【最大流模版】的更多相关文章

  1. poj 1273 Drainage Ditches 最大流入门题

    题目链接:http://poj.org/problem?id=1273 Every time it rains on Farmer John's fields, a pond forms over B ...

  2. POJ 1273 - Drainage Ditches - [最大流模板题] - [EK算法模板][Dinic算法模板 - 邻接表型]

    题目链接:http://poj.org/problem?id=1273 Time Limit: 1000MS Memory Limit: 10000K Description Every time i ...

  3. Poj 1273 Drainage Ditches(最大流 Edmonds-Karp )

    题目链接:poj1273 Drainage Ditches 呜呜,今天自学网络流,看了EK算法,学的晕晕的,留个简单模板题来作纪念... #include<cstdio> #include ...

  4. POJ 1273 Drainage Ditches 最大流

    这道题用dinic会超时 用E_K就没问题 注意输入数据有重边.POJ1273 dinic的复杂度为O(N*N*M)E_K的复杂度为O(N*M*M)对于这道题,复杂度是相同的. 然而dinic主要依靠 ...

  5. poj 1273 Drainage Ditches_最大流模版

    #include <iostream> #include<cstdio> #include<queue> #include<cstring> using ...

  6. POJ 1273 Drainage Ditches | 最大流模板

    #include<cstdio> #include<algorithm> #include<cstring> #include<queue> #defi ...

  7. POJ 1273 Drainage Ditches(最大流Dinic 模板)

    #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int n, ...

  8. poj 1273 Drainage Ditches(最大流)

    http://poj.org/problem?id=1273 Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Subm ...

  9. POJ 1273 Drainage Ditches (网络最大流)

    http://poj.org/problem? id=1273 Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Sub ...

  10. poj 1273 Drainage Ditches【最大流入门】

    Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 63924   Accepted: 2467 ...

随机推荐

  1. c# partial 分部类和分部方法

    一.partial 它是一个关键字修饰符.可以将类或结构.接口或方法的定义拆分到两个或更多个源文件中. 每个源文件包含类型或方法定义的一部分,编译应用程序时将把所有部分组合起来.修饰符不可用于委托或枚 ...

  2. qt 免注册下载

    下载地址为: http://download.qt.io/

  3. Go Rand小结

    对于Random的使用,在业务中使用频率是非常高的,本文就小结下常用的方法: 在Golang中,有两个包提供了rand,分别为 "math/rand" 和 "crypto ...

  4. 转-C语言中.h和.c文件解析

    C语言中.h和.c文件解析(很精彩)   简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程:       1.预处理阶段 2.词 ...

  5. 前端 ----jQuery的动画效果

    03-jQuery动画效果   jQuery提供的一组网页中常见的动画效果,这些动画是标准的.有规律的效果:同时还提供给我们了自定义动画的功能. 显示动画 方式一: $("div" ...

  6. echo和重定向

    命令: echo 作用: echo有重复的意思,会在终端中显示参数指定的文字,通常会和重定向联合使用 使用: echo 文字内容 例子: 在终端中显示hello echo hello 命令: > ...

  7. Solidity(address的四个方法)

    address的四个方法send,call,callcode,delegatecall 例子:发送以太币的send方法//下面是send方法,涉及到以太币的情况可能用到payable,senddemo ...

  8. bsdiff的编译与使用

    bsdiff是一个差异包比较工具,可以用来实现增量更新. 下载地址:http://www.daemonology.net/bsdiff 编译 Mac环境 版本:macOS 10.12 1.解压下载的b ...

  9. cocos2dx-lua控制台报错集合

    1.invalid 'cobj' in function 'lua_cocos2dx_Node_getLocalZOrder' 这个报错是lua的变量还在,但是他底层对应的C++对象已被销毁.

  10. sysstat-----获取服务器负载历史记录

    sysstat工具与负载历史回放 很多系统负载过高的时候我们是无法立即获知或者立即解决的,当检测到或者知道历史的高负载状况时,可能需要回放历史监控数据,这时 sar 命令就派上用场了,sar命令同样来 ...