/*
唐代杜荀鹤
《小松》
自小刺头深草里,而今渐觉出蓬蒿。
时人不识凌云木,直待凌云始道高。
*/
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
#include <utility>
#include <iomanip>
#include <string>
#include <cmath>
#include <queue>
#include <assert.h>
#include <map>
#include <ctime>
#include <cstdlib>
#include <stack>
#include <set>
#define LOCAL
const int INF = 0x7fffffff;
const int MAXN = + ;
const int maxnode = * + * ;
const int MAXM = + ;
const int MAX = ;
using namespace std;
struct Edge{
int u, v, c, f;
void init(int a, int b, int d, int e){
u = a;v = b;
c = d;f = e;
}
}edges[MAXM];
int next[MAXN], M, cur[MAXN], vis[MAXN];
int dist[MAXN], head[MAXN], n, m, sta, end; void addEdge(int u, int v, int c){
edges[M].init(u, v, c, );M++;
edges[M].init(v, u, , );//反向边
next[M - ] = head[u];
head[u] = M - ;
next[M] = head[v];
head[v] = M++;
return;
}
void init(){
M = ;//总边数
memset(head, -, sizeof(head));
scanf("%d%d", &n, &m);
for (int i = ; i <= m; i++){
int u, v, c;
scanf("%d%d%d", &u, &v, &c);
addEdge(u, v, c);
}
sta = ;
end = n;
}
bool bfs(){
memset(vis, , sizeof(vis));
queue<int>Q;
dist[sta] = ;
vis[sta] = ;
Q.push(sta);
while (!Q.empty()){
int u = Q.front();
Q.pop();
for (int i = head[u]; i != -; i = next[i]){
int e = i, v = edges[e].v;
if (vis[v]) continue;
if (edges[e].c > edges[e].f){
vis[v] = ;
dist[v] = dist[u] + ;
Q.push(v);
}
}
}
return vis[end];
}
int dfs(int x, int a){
if (x == end || a == ) return a;
int flow = , f;
if (cur[x] == -) cur[x] = head[x];
for (int &i = cur[x]; i != -; i = next[i]){
int e = i, v = edges[i].v;
if (dist[v] == dist[x] + && (f = dfs(v, min(edges[e].c - edges[e].f, a))) > ){
flow += f;
a -= f;
edges[e].f += f;
edges[e ^ ].f -= f;
if (a == ) break;
}
}
return flow;
}
int Dinic(){
int flow = ;
while (bfs()){
memset(cur, -, sizeof(cur));
flow += dfs(sta, INF);
}
return flow;
} int main(){
#ifdef LOCAL
freopen("data.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif
init();
printf("%d", Dinic());
//printf("%d", (a == c));
return ;
}

【模板】【网络流】Dinic的更多相关文章

  1. 模板——网络流Dinic

    感谢这位大佬的博客:https://www.cnblogs.com/SYCstudio/p/7260613.html 给予了我莫大的帮助! 主要说一下网络流的几个注意点: 1.和二分图匹配相似,无法继 ...

  2. 模板-网络流-Dinic

    //Dinic struct Edge{ int from,to,cap,flow; Edge(){ } Edge(int a,int b,int c,int d){ from=a; to=b; ca ...

  3. POJ 1273 Drainage Ditches (网络流Dinic模板)

    Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover ...

  4. ACM/ICPC 之 有流量上下界的网络流-Dinic(可做模板)(POJ2396)

    //有流量上下界的网络流 //Time:47Ms Memory:1788K #include<iostream> #include<cstring> #include<c ...

  5. POJ 1273 Drainage Ditches(网络流dinic算法模板)

    POJ 1273给出M条边,N个点,求源点1到汇点N的最大流量. 本文主要就是附上dinic的模板,供以后参考. #include <iostream> #include <stdi ...

  6. POJ 3281 [网络流dinic算法模板]

    题意: 农场主有f种食物,d种饮料,n头牛. 接下来的n行每行第一个数代表第i头牛喜欢吃的食物数量,和第i头牛喜欢喝的饮料数目. 接下来分别是喜欢的食物和饮料的编号. 求解:农场主最多能保证几头牛同时 ...

  7. 网络流dinic ek模板 poj1273

    这里只是用来存放模板,几乎没有讲解,要看讲解网上应该很多吧…… ek bfs不停寻找增广路到找不到为止,找到终点时用pre回溯,O(VE^2) #include<cstdio> #incl ...

  8. Power Network POJ - 1459 网络流 DInic 模板

    #include<cstring> #include<cstdio> #define FOR(i,f_start,f_end) for(int i=f_startl;i< ...

  9. 网络流Dinic模板

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

  10. 网络流dinic模板,邻接矩阵+链式前向星

    //这个是邻接矩阵的#include<iostream> #include<queue> #include<string.h> #include<stdio. ...

随机推荐

  1. ACM2054_A=B

    /* 问题说明 给你两个号码A和B,如果A等于B,您应打印“YES”,或打印“NO”. 输入 每个测试案例包含A和B两个数字 产量 每一种情况下,如果A等于B,您应打印“YES”,或打印“NO”. 采 ...

  2. COM初体验

    以前在我学校里培训过一段时间C++,我敬爱的吴老师略有提及.那个时候觉得COM遥不可及,觉得,哇塞好神圣.我觉得自己啥都没学好,我不应该这么早去涉及这片过于光荣的领地.既没有觉悟也没有动力去迎接这样一 ...

  3. Oracle 监控索引使用

    Oracle提供一个监控索引的方法,来确定索引是否被使用.如果索引没有被使用,就可以删除它们以减少不必要的语句的开销.因为表上的大量不必要的索引可能会降低DML语句的性能,给数据库性能产生压力.所以生 ...

  4. Git服务器仓库的搭建和客户端使用方法

    环境说明: 1.fedora21  桌面系统  2.已经配置好yum仓库 一.安装git # yum install git 1.1 创建git用户 创建git账户并登录,直接指定用户目录到/home ...

  5. NDK安装 eclipse 不出现NDK目录问题

    android adt自带eclipse无法设置ndk路径 具体情况是 我在mac上搭建android环境 到android sdk官网下载r23版本的adt时自带的eclipse没有设置ndk路径的 ...

  6. 如何解决 SogouIinput not enough space for thread data ?? 虚拟内存

    问题:总是提示没有足够的空间读写数据 上图: 原因: 可能是虚拟内存设置了过大了[我不知道明白是不是也是这样,我出现这个问题就是因为我把虚拟内存设置成了4G,我的物理内存是2G的] 具体问题具体分析, ...

  7. 如何正确并完全安装Visual Studio 2015企业版本[转]

    http://blog.csdn.net/code_godfather/article/details/47381631 [注意事项]1> 本文描述的是: Visual Studio 2015企 ...

  8. Android如何在Framework层使用解锁代码

    import android.app.KeyguardManager; import android.app.KeyguardManager.KeyguardLock; import com.andr ...

  9. 利用NPOI开源的读写Excel、WORD等微软OLE2组件读写execl,控制样式或单元格

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  10. linux 调度器配制参数

    http://blog.csdn.net/wudongxu/article/details/8574753 参数位置: /proc/sys/kernel/ 编绎内核时参数 [root@monitor ...