题意:现在有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. 在Visual Studio里配置及查看IL

    原文地址:http://www.myext.cn/other/a_25162.html 在之前的版本VS2010中,在Tools下有IL Disassembler(IL中间语言查看器),但是我想直接集 ...

  2. Redis持久化存储(AOF与RDB两种模式)

    Redis中数据存储模式有2种:cache-only,persistence; cache-only即只做为“缓存”服务,不持久数据,数据在服务终止后将消失,此模式下也将不存在“数据恢复”的手段,是一 ...

  3. locale and system laungues

    In computing, a locale is a set of parameters that defines the user's language, region and any speci ...

  4. 前端 ----jQuery的介绍

    01-jQuery的介绍   1.为什么要使用jQuery 在用js写代码时,会遇到一些问题: window.onload 事件有事件覆盖的问题,因此只能写一个事件. 代码容错性差. 浏览器兼容性问题 ...

  5. ubuntu安装jdk8

    文章连接:https://www.cnblogs.com/lighten/p/6105463.html 1.简单的安装方法 安装JDK的最简单方法应该就是使用apt-get来安装了,但是源一般是Ope ...

  6. 如何将本地项目上传到Github

    看了这篇文章觉得写的很详细很适合初学者  提供给大家参考下. http://blog.csdn.net/zamamiro/article/details/70172900 注意如果第二次git pus ...

  7. 10)django-ORM(创建,字段类型,字段参数)

    一:ORM关系对象映射(Object Relational Mapping,简称ORM) ORM分两种: DB first 先在数据库中创建数据库表等 Code first 先创建类,然后根据类创建数 ...

  8. JavaScript自定义对象

    一,概述 在Java语言中,我们可以定义自己的类,并根据这些类创建对象来使用,在Javascript中,我们也可以定义自己的类,例如定义User类.Hashtable类等等. 目前在Javascrip ...

  9. Python-面向对象(组合、封装与多态)

    一.组合 什么是组合? 就是一个类的属性 的类型 是另一个自定义类的 类型,也可以说是某一个对象拥有一个属性,该属性的值是另一个类的对象. 通过为某一个对象添加属性(这里的属性是另一个类的对象)的方式 ...

  10. 洛谷P5219 无聊的水题 I [prufer序列,生成函数,NTT]

    传送门 思路 有标号无根树的计数,还和度数有关,显然可以想到prufer序列. 问题就等价于求长度为\(n-2\),值域为\([1,n]\),出现次数最多的恰好出现\(m-1\)次,这样的序列有哪些. ...