POJ 1273 Drainage Ditches (dinic模板)
来源:互联网 发布:景观设计效果图软件 编辑:程序博客网 时间:2024/05/01 00:25
题目链接:http://poj.org/problem?id=1273
很经典的最大流问题,用此总结dinic模板
dinic比E-K多了个DFS,只要明白什么是把图分层了,就不难理解了。BFS找增广路的同时把图分层,相当于记录了多条增广路,可以让每次dinic能处理尽量多的增广路。
模板:
#include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <algorithm>#define MAX 65535struct node{ int e; int w; int fro;}eg[400];int head[400]; //正儿八经的前向星using namespace std;int cont;void add(int s,int e,int w) //加边{ eg[cont].e = e; //前向弧 eg[cont].w = w; eg[cont].fro = head[s]; head[s] = cont++; eg[cont].e = s; //反向弧 eg[cont].w = 0; eg[cont].fro = head[e]; head[e] = cont++; return ;}int dis[400];int BFS(int s,int e) //BFS找增光路 并且分层次{ int now,tmp; memset(dis,-1,sizeof (dis)); queue<int> que; que.push(s); dis[s] = 0; while (!que.empty()) { now = que.front(); que.pop(); for (int i = head[now];i != -1;i = eg[i].fro) { int v = eg[i].e; if (dis[v] == -1 && eg[i].w > 0) { dis[v] = dis[now] + 1; //分层 que.push(v); } } } if (dis[e] != -1) return 1; return 0;}int dinic(int s,int e,int t){ if (s == e) return t; int tmp = t; for (int i = head[s];i != -1;i = eg[i].fro) { int v = eg[i].e; if(dis[v] == dis[s] + 1 && eg[i].w > 0) { int imin = dinic(v,e,min(t,eg[i].w)); //递归找最小容量,其实就是个DFS eg[i].w -= imin; eg[i ^ 1].w += imin; t -= imin; } } return tmp - t;}int main(){ int n,m; while (~scanf ("%d%d",&n,&m)) { int i; cont = 0; memset(head,-1,sizeof (head)); for (i = 0;i < n;i++) { int a,b,c; scanf ("%d%d%d",&a,&b,&c); add(a,b,c); } int ans = 0; while (BFS(1,m)) ans += dinic(1,m,MAX); printf ("%d\n",ans); } return 0;}
0 0
- POJ 1273 Drainage Ditches (dinic模板)
- POJ 1273 Drainage Ditches(dinic模板)
- POj 1273 Drainage Ditches (最大流 Dinic + ISAP 模板)
- POJ 1273 Drainage Ditches -dinic
- POJ 1273 --Drainage Ditches【最大流模板 && dinic】
- 【poj 1273】Drainage Ditches 最大流dinic模板
- poj 1273 Drainage Ditches(最大流E-K +dinic 模板)
- poj 1273 & hdu 1532 Drainage Ditches(最大流 )EK,dinic模板
- POJ-1273-Drainage Ditches(最大流)dinic实现 后续模板待补充
- nyoj 323 Drainage Ditches(dinic模板)
- 【poj1273】Drainage Ditches(Dinic模板)
- poj 1273 Drainage Ditches(最大流 dinic模版)
- 【最大流(dinic)】poj 1273 Drainage Ditches
- poj 1273Drainage Ditches(简单网络流(用dinic))
- POJ 1273~Drainage Ditches(网络最大流ek,dinic)
- POJ 1273 && HDU 1532 Drainage Ditches(最大流-Dinic)
- POJ 1273 Drainage Ditches(网络流【Dinic算法】)
- poj 1273 Drainage Ditches -- (Dinic 算法入门)
- 使用PDFLib生成PDF文档教程
- Prototype(原型模式)
- oracle 跟踪PMON动态注册
- java编程思想(第四版)第二章练习题-2
- 代码优化
- POJ 1273 Drainage Ditches (dinic模板)
- DNS服务器和DNS从属关系部署
- 创建型设计模式---构建模式(Builder)
- Javascript中的类实现
- 使用arm-eabi-addr2line, ndk-stack工具跟踪Android调用堆栈
- 字符编码笔记:ASCII,Unicode和UTF-8
- Cocos2d-x学习笔记(九)纹理CCTexture2D和精灵CCSprite
- 软阵列和LVM实现
- oracle 释放无用连接