问题:调控水流从s点经过许多不同容量的水管到达t点的使得流量最大值的问题

概念解释:
G(u,v)代表图中的路
c(u,v)代表路的容量
f(u,v)代表的是当前路的流量
r(u,v)代表还能够增加的流量的图,即残量网络:r(u,v)=c(u,v)-f(u,v)
增广路:在残量网络中的一条从s通往t的路径,其中的任何一条路(u,v)都有r(u,v)>0
反向边:从某个节点A到B的路有一条B到A的路使得f(A,B)=r(B,A),反向边的意义是纠正算法中可能出现的错误,意味着将这条路的流量向反向挤回去。
增广路算法:用bfs去找一条最短的增广路,然后沿着这条路径去修改当前流量值,当没有增广路的时候,算法结束,所得即为最大流
算法复杂度为O(V|E|)

解题关键:建了图你就赢

模版题:hdu 1532

题意:给你n个点,m条有向边及其容量,找出1-n的最大流

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <vector>
#include <algorithm>
#define INF 0x3f3f3f3f
using namespace std;
//http://acm.hdu.edu.cn/showproblem.php?pid=1532struct Node
{int to,cap,rev;
};
vector<Node> g[2500];
bool used[2500];void add_edge(int from,int to ,int cap)
{Node n;n.to=to;n.cap=cap;n.rev=g[to].size();g[from].push_back(n);n.to=from;n.cap=0;n.rev=g[from].size()-1;g[to].push_back(n);
}int dfs(int v,int t,int f)
{if(v==t) return f;used[v]=true;for(int i=0;i<g[v].size();i++){Node &e=g[v][i];if(!used[e.to]&&e.cap>0){int d=dfs(e.to,t,min(f,e.cap));if(d>0){e.cap-=d;                  g[e.to][e.rev].cap+=d;     return d;}}}return 0;
}
int max_flow(int s,int t)
{int flow=0;while(1){memset(used,0,sizeof(used));int f=dfs(s,t,INF);if(f==0) return flow;flow+=f;}
}
int main()
{int m,n;while(cin>>n>>m){memset(g,0,sizeof g);for(int i=0;i<n;i++){int a,b,c;scanf("%d%d%d",&a,&b,&c);add_edge(a,b,c);}printf("%d\n",max_flow(1,m));}return 0;
}

另外一题:poj 1698

题意是有n部电影拍摄,每部电影的拍摄时间只能是固定在一周的某几天,每部电影至少拍摄di天,最多只能拍摄wi个星期,问一个女孩能不能完成所有的电影拍摄。

思路:

将每部电影可以拍摄的日期建立连边,容量设为1,最后检查t的流量是否等于每部电影需要拍摄的时间之和可得答案
s->film: f=di c=di
film->date: c=1
date->t: c=INF

代码:

#include <iostream>
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <vector>
#include <algorithm>
#define INF 0x3f3f3f3f
using namespace std;
struct Node
{int to,cap,rev;
};
vector<Node> g[2500];
bool used[2500];void add_edge(int from,int to ,int cap)
{Node n;n.to=to;n.cap=cap;n.rev=g[to].size();g[from].push_back(n);n.to=from;n.cap=0;n.rev=g[from].size()-1;g[to].push_back(n);
}int dfs(int v,int t,int f)
{if(v==t) return f;used[v]=true;for(int i=0;i<g[v].size();i++){Node &e=g[v][i];if(!used[e.to]&&e.cap>0){int d=dfs(e.to,t,min(f,e.cap));if(d>0){e.cap-=d;g[e.to][e.rev].cap+=d;return d;}}}return 0;
}
int max_flow(int s,int t)
{int flow=0;while(1){memset(used,0,sizeof(used));int f=dfs(s,t,INF);if(f==0) return flow;flow+=f;}
}
int main()
{int week[10];int t,film,di,wi,sumdate;cin>>t;while(t--){memset(g,0,sizeof(g));memset(used,0,sizeof(used));sumdate=0;scanf("%d",&film);for(int i=1;i<=film;i++){for(int j=0;j<7;j++)scanf("%d",&week[j]);scanf("%d%d",&di,&wi);add_edge(0,i,di);sumdate+=di;for(int j=0;j<7;j++){if(week[j]==1){for(int k=0;k<wi;k++)add_edge(i,film+1+k*7+j,1);      //  不要在后面加上add_edge(film+1+k*7+j,372,1); 这会导致重边的出现}}}for(int j=film+1;j<372;j++){add_edge(j,372,1);}if(sumdate==max_flow(0,372))printf("Yes\n");elseprintf("No\n");}return 0;
}

【AC梦工厂】最大流hdu1532模版题相关推荐

  1. HDU2896(AC自动机模版题)

    AC自动机模版题: 方法一:超时 #include<iostream> #include<algorithm> #include<cstring> #include ...

  2. 畅通工程(并查集模版题)

    题意: 多组输入N,M,当N为0退出人输入,N是道路数目,M是村庄总数,随后N行,每行输入三个数两个村庄的编号,以及连接这两个村庄的费用. 对每一组数据输出畅通工程的最低费用,如果不能畅通就输出&qu ...

  3. 一起来读《游戏设计梦工厂》

    一起来读<游戏设计梦工厂>--游戏的结构 一起来读<游戏设计梦工厂>--游戏的结构 不同游戏中的共同点: 玩家 目标 程序 规则 资源 冲突 边界 结果 正规元素 什么给予了玩 ...

  4. DT大数据梦工厂 第51讲

    王家林亲授<DT大数据梦工厂>大数据实战视频"Scala深入浅出实战经典"视频.音频和PPT下载!第51讲:Scala中链式调用风格的实现代码实战及其在Spark编程中 ...

  5. 全球最大的AI创意梦工厂!2019中国高校计算机大赛-人工智能创意赛开始报名啦!...

    寻找"最创意"的 AI 新锐! 做"最技术"的创意发现! 提供"最豪华"的资源支持! 争夺"最丰厚"的竞赛奖励! 每一个 ...

  6. hdu 1286 找新朋友 欧拉函数模版题

    找新朋友 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Problem Des ...

  7. PAT (Top Level) Practise 1008 Airline Routes(Tarjan模版题)

    1008. Airline Routes (35) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue Given a ...

  8. DT大数据梦工厂 第55,56讲

    王家林亲授<DT大数据梦工厂>大数据实战视频"Scala深入浅出实战经典"视频.音频和PPT下载!第55讲:Scala中Infix Type实战详解 百度云盘:http ...

  9. Spark分区详解!DT大数据梦工厂王家林老师亲自讲解!

    Spark分区详解!DT大数据梦工厂王家林老师亲自讲解! http://www.tudou.com/home/_79823675/playlist?qq-pf-to=pcqq.group 一.分片和分 ...

最新文章

  1. BZOJ1001[BeiJing2006]狼抓兔子最小割網絡流
  2. 使用object detection训练并识别自己的模型
  3. 21. 合并两个有序链表(C语言)
  4. margin 和 padding 的使用区别
  5. OpenCV使用Facemark API
  6. thrift java first demo
  7. android手写计算器,手写计算器MyScript Calculator
  8. C#操作-LX3600非接触式IC卡读写器
  9. 罗格斯的计算机科学,罗格斯大学计算机科学研究生申请截止日期
  10. 笔记——跟熊浩学沟通
  11. python识别中文验证码_Python实现验证码识别
  12. 2017国庆假期学习总结
  13. 上传图片为线上图片,可以在线访问
  14. word批注怎么删除计算机名字,【2人回答】Word批注中的名字怎么删除?-3D溜溜网...
  15. 东辉职校计算机专业录取分数线,2016年上海东辉职校录取分数
  16. (转)Ogre 天龙八部 GridInfo文件格式说明(正确版)
  17. tiktok运营学习怎么样
  18. XDOJ.172 构造表达式
  19. 致曾经那个优秀的女孩儿
  20. PIC18F45k22单片机程序文件目录存放架构

热门文章

  1. 工作之路 - 南京滕楷通訊科技有限公司
  2. t检验(独立样本t检验 配对样本t检验 非参检验 多余两组的比较 方差分析 非参检验)
  3. 认知无线网络中的双层博弈
  4. 哪一种开发语言有潜力有发展
  5. F盘文件系统RAW文件怎样恢复
  6. 冰冰学习笔记:异常处理
  7. 美国东北大学本科计算机排名,美国东北大学qs排名怎么样?
  8. Storm入门到精通(四)---本地实例Demo
  9. 064.django之模型层单表查询
  10. 基于JAVA网上求职招聘系统计算机毕业设计源码+数据库+lw文档+系统+部署