1. #include<iostream>
  2. /*
  3. 题意:就是寻找从源点到汇点的最大流!
  4. 要注意的是每两个点的流量可能有多个,也就是说有重边,所以要把两个点的所有的流量都加起来
  5. 就是这两个点之间的流量了!
  6.  
  7. 思路:建图之后直接套用最大流算法(EK, 或者是Dinic算法) 图解Dinic算法流程!

  8. */
  9. #include<queue>
  10. #include<cstring>
  11. #include<cstdio>
  12. #include<algorithm>
  13. #define INF 0x3f3f3f3f3f3f3f3f
  14. #define N 205
  15. using namespace std;
  16. typedef long long LL;
  17. LL cap[N][N];
  18.  
  19. int m, n;
  20. LL maxFlow;
  21. int d[N];
  22. queue<int>q;
  23.  
  24. bool bfs(){
  25. q.push();
  26. memset(d, , sizeof(d));
  27. d[]=;
  28. while(!q.empty()){
  29. int u=q.front();
  30. q.pop();
  31. for(int v=; v<=n; ++v)
  32. if(!d[v] && cap[u][v]>){
  33. d[v]=d[u]+;
  34. q.push(v);
  35. }
  36. }
  37. if(!d[n]) return false;
  38. return true;
  39. }
  40.  
  41. LL dfs(int u, LL flow){
  42. if(u==n) return flow;
  43. for(int v=; v<=n; ++v)
  44. if(d[v]==d[u]+ && cap[u][v]>){
  45. LL a=dfs(v, min(flow, cap[u][v]));
  46. if(a==) continue;//如果a==0 说明没有找到从起点到汇点的增广路, 然后换其他路接着寻找!
  47. cap[u][v]-=a;
  48. cap[v][u]+=a;
  49. return a;
  50. }
  51. return ;
  52. }
  53.  
  54. void Dinic(){
  55. LL flow;
  56. while(bfs()){//利用bfs构造好层次图,这样dfs在寻找阻塞流的时候,就不会盲目的寻找了!
  57. while(flow=dfs(, INF)) maxFlow+=flow;//利用构造好的层次图不断的寻找阻塞流!
  58. }
  59. }
  60.  
  61. int main(){
  62. while(scanf("%d%d", &m, &n)!=EOF){
  63. memset(cap, , sizeof(cap));
  64. while(m--){
  65. int u, v;
  66. LL w;
  67. scanf("%d%d%lld", &u, &v, &w);
  68. cap[u][v]+=w;
  69. }
  70. maxFlow=;
  71. Dinic();
  72. printf("%lld\n", maxFlow);
  73. }
  74. return ;
  75. }
  1. //EK算法同样搞定
  2. #include<iostream>
  3. #include<queue>
  4. #include<cstdio>
  5. #include<cstring>
  6. #include<algorithm>
  7. #define INF 0x3f3f3f3f
  8. using namespace std;
  9. typedef __int64 LL;
  10. LL cap[][];
  11. int pre[];
  12. LL a[];
  13. int m, n;
  14. queue<int>q;
  15. LL maxFlow;
  16. bool spfa(){
  17. while(!q.empty()) q.pop();
  18. memset(a, , sizeof(a));
  19. q.push();
  20. a[]=INF;
  21. while(!q.empty()){
  22. int u=q.front();
  23. q.pop();
  24. for(int v=; v<=n; ++v)
  25. if(!a[v] && cap[u][v]>){
  26. pre[v]=u;
  27. a[v]=min(a[u], cap[u][v]);
  28. q.push(v);
  29. }
  30. if(a[n]) break;
  31. }
  32. if(!a[n]) return false;
  33. return true;
  34. }
  35.  
  36. void EK(){
  37. maxFlow=;
  38. while(spfa()){
  39. int u=n;
  40. maxFlow+=a[n];
  41. while(u!=){
  42. cap[pre[u]][u]-=a[n];
  43. cap[u][pre[u]]+=a[n];
  44. u=pre[u];
  45. }
  46. }
  47. }
  48. int main(){
  49. while(scanf("%d%d", &m, &n)!=EOF){
  50. memset(cap, , sizeof(cap));
  51. while(m--){
  52. int u, v;
  53. LL w;
  54. scanf("%d%d%I64d", &u, &v, &w);
  55. cap[u][v]+=w;
  56. }
  57. EK();
  58. printf("%I64d\n", maxFlow);
  59. }
  60. return ;
  61. }

poj1273Drainage Ditches的更多相关文章

  1. POJ1273Drainage Ditches[最大流]

    Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 71559   Accepted: 2784 ...

  2. POJ-1273-Drainage Ditches(网络流之最大流)

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

  3. POJ-1273-Drainage Ditches 朴素增广路

    Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 70588   Accepted: 2743 ...

  4. 图论-网络流-最大流--POJ1273Drainage Ditches(Dinic)

    Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 91585   Accepted: 3549 ...

  5. POJ-1273Drainage Ditches(网络流入门题,最大流)

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

  6. poj1273--Drainage Ditches(最大流Edmond-Karp算法 邻接表实现)

    最大流模板题 大部分Edmond-Karp算法代码都是邻接矩阵实现,试着改成了邻接表. #include <iostream> #include <cstdio> #inclu ...

  7. 【最大流Dinic模板】HDU1532&POJ1273-Drainage Ditches(16/3/6更正)

    #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #inc ...

  8. POJ 1273 Drainage Ditches题解——S.B.S.

    Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 67823   Accepted: 2620 ...

  9. I:trainage Ditches

    总时间限制: 1000ms 内存限制: 65536kB描述Every time it rains on Farmer John's fields, a pond forms over Bessie's ...

随机推荐

  1. java word 转 pdf

    这里使用jacob将word转pdf,使用的是jacob.jar import java.io.File;import com.jacob.activeX.ActiveXComponent;impor ...

  2. AIX常用命令总结

    1.查看机器硬盘信息 :lspv :lsdev -Cc disk :lsattr -EI hdisk0 :lscfg -vl hdisk0 2.查看AIX系统版本号 : oslevel -s : os ...

  3. spring 装配核心笔记

    (1)自动装配 开启ComponentScan(自动扫描), 通过在类使用注解@Component(默认bean id为类名第一个字符小写), 使用@Autowired实现属性,构造函数,成员函数的自 ...

  4. [Xamarin] 簡單使用Fragment 靜態篇 (转帖)

    新的Android 開發,非常會使用到Fragment,不過官方範例有點小複雜,對初學者來說有點難消化,所以就記錄一下心得,這邊部落格將使用靜態的方法使用Fragment,Fragment 有自己的生 ...

  5. JedisPool异常Jedis链接处理

    问题现象(jedis-2.1.0.jar) 基于JedisPool管理Jedis对象,通过get方法获取值,出现key对应的value值错误,例如: K V a a b b Jedis.get(“a” ...

  6. Visual Studio 2015 RC版官方下载(ISO)

    微软Build2015开发者大会发布了下代开发套件Visual Studio 2015 RC候选版,覆盖企业版.专业版以及免费授权的Community社区版,原生支持开发通用型Windows Apps ...

  7. 《你必须知道的.NET》读书笔记一:小OO有大智慧

    此篇已收录至<你必须知道的.Net>读书笔记目录贴,点击访问该目录可以获取更多内容. 一.对象  (1)出生:系统首先会在内存中分配一定的存储空间,然后初始化其附加成员,调用构造函数执行初 ...

  8. JavaScript使用DeviceOne开发实战(五)仿ZAKER应用

    关于index底下切换的的组件,可以用ViewShower实现,详见: do_ViewShower http://bbs.deviceone.net/forum.php?mod=viewthread& ...

  9. JavaScript函数编程-Ramdajs

    在JavaScript语言世界,函数是第一等公民.JavaScript函数是继承自Function的对象,函数能作另一个函数的参数或者返回值使用,这便形成了我们常说的高阶函数(或称函数对象).这就构成 ...

  10. Linux Shell函数

    200 ? "200px" : this.width)!important;} --> 介绍 正文 $? $?是shell变量,表示"最后一次执行命令"的 ...