题意:给一个无向图,每条边上都有容量的限制,要求求出给定起点和终点的最大流。

思路:每条无向边就得拆成2条,每条还得有反向边,所以共4条。源点汇点已经给出,所以不用建了。直接在图上跑最大流就可以了。

  1. #include <bits/stdc++.h>
  2. #define LL long long
  3. #define pii pair<int,int>
  4. #define INF 0x7f7f7f7f
  5. using namespace std;
  6. const int N=;
  7. const int mod=1e9+;
  8. int s, t;
  9.  
  10. int path[N], flow[N];
  11. vector<int> vect[N];
  12.  
  13. struct node
  14. {
  15. int from, to, cap, flow;
  16. node(){};
  17. node(int from,int to,int cap,int flow):from(from),to(to),cap(cap),flow(flow){};
  18. }edge[];
  19. int edge_cnt;
  20.  
  21. void add_node(int from,int to,int cap,int flow)
  22. {
  23. edge[edge_cnt]=node(from,to,cap,flow);
  24. vect[from].push_back(edge_cnt++);
  25. }
  26.  
  27. int BFS(int s,int e)
  28. {
  29. deque<int> que(,s);
  30. flow[s]=INF;
  31. while(!que.empty())
  32. {
  33. int x=que.front();
  34. que.pop_front();
  35. for(int i=; i<vect[x].size(); i++)
  36. {
  37. node e=edge[vect[x][i]];
  38. if(!flow[e.to] && e.cap>e.flow)
  39. {
  40. flow[e.to]=min(flow[e.from],e.cap-e.flow);
  41. path[e.to]=vect[x][i];
  42. que.push_back(e.to);
  43. }
  44. }
  45. if(flow[e]) return flow[e];
  46. }
  47. return flow[e];
  48. }
  49.  
  50. int max_flow(int s,int e)
  51. {
  52. int ans_flow=;
  53. while(true)
  54. {
  55. memset(path,,sizeof(path));
  56. memset(flow,,sizeof(flow));
  57.  
  58. int tmp=BFS(s,e);
  59. if(!tmp) return ans_flow;
  60. ans_flow+=tmp;
  61.  
  62. int ed=e;
  63. while(ed!=s)
  64. {
  65. int t=path[ed];
  66. edge[t].flow+=tmp;
  67. edge[t^].flow-=tmp;
  68. ed=edge[t].from;
  69. }
  70. }
  71. }
  72. int main()
  73. {
  74. freopen("input.txt", "r", stdin);
  75. int n, a, b, v, c, j=;
  76. while(scanf("%d",&n),n)
  77. {
  78. edge_cnt=;
  79. memset(edge,,sizeof(edge));
  80. for(int i=; i<=n+; i++) vect[i].clear();
  81.  
  82. scanf("%d%d%d", &s, &t, &c);
  83. for(int i=; i<c; i++)
  84. {
  85. scanf("%d%d%d",&a,&b,&v);
  86. add_node(a, b, v, );
  87. add_node(b, a, , );
  88. add_node(b, a, v, );
  89. add_node(a, b, , );
  90. }
  91. printf("Network %d\n",++j);
  92. printf("The bandwidth is %d.\n\n", max_flow(s ,t) );
  93. }
  94. return ;
  95. }

AC代码

UVA 820 Internet Bandwidth 因特网宽带(无向图,最大流,常规)的更多相关文章

  1. UVA - 820 Internet Bandwidth (因特网带宽)(最大流)

    题意:给出所有计算机之间的路径和路径容量后,求出两个给定结点之间的流通总容量.(假设路径是双向的,且两方向流动的容量相同) 分析:裸最大流.标号从1开始,初始化的时候注意. #pragma comme ...

  2. UVA 820 Internet Bandwidth

    题意: 给出双向图,求给出两点的流通总流量. 分析: 网络流中的增广路算法. 代码: #include <iostream>#include <cstring>#include ...

  3. UVa 820 Internet Bandwidth (裸板网络流)

    题意:有一个计算机网络,输入节点数n,输入网络流源点和汇点src,des,再输入双向边数m.给出m条边的负载,求最大流. 析:直接上网络流的最大流. 代码如下: #pragma comment(lin ...

  4. UVA - 820 Internet Bandwidth(最大流模板题)

    题目: 思路: 直接套最大流的模板就OK了,注意一下输出的格式. 代码: #include <bits/stdc++.h> #define inf 0x3f3f3f3f #define M ...

  5. light oj 1153 - Internet Bandwidth【网络流无向图】

    1153 - Internet Bandwidth   PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 ...

  6. UVA 820 --- POJ 1273 最大流

    找了好久这两个的区别...UVA820 WA了 好多次.不过以后就做模板了,可以求任意两点之间的最大流. UVA 是无向图,因此可能有重边,POJ 1273是有向图,而且是单源点求最大流,因此改模板的 ...

  7. UVa 820 因特网带宽(最大流)

    https://vjudge.net/problem/UVA-820 题意: 给出所有计算机之间的路径和路径容量后求出两个给定结点之间的流通总容量. 思路: 裸的最大流问题.注意有个比较坑的地方,最后 ...

  8. UVa OJ 140 - Bandwidth (带宽)

    Time limit: 3.000 seconds限时3.000秒 Problem问题 Given a graph (V,E) where V is a set of nodes and E is a ...

  9. uva 820(最大流)

    最大流的裸题,直接贴了模板. #include <cstdio> #include <iostream> #include <sstream> #include & ...

随机推荐

  1. ios 开发常用快捷键

    CTRL + K 删除一行,尽量在行首处使用: CMD+ /  注释,取消注释 CMD + R  运行 CMD + . 停止运行 CMD + F   普通搜索 CMD + CTRL + ↑/↓ 切换头 ...

  2. 使用JS启动本地应用程序、屏幕键盘

    问题描述:     现在希望在Web端使用JS调用本地应用程序 问题解决:   (1)使用JS启动本地应用程序 使用上述代码重点是创建了一个ActiveXObject的对象     参考说明:     ...

  3. 通过WebBrowser获取网页验证码

    /// <summary> /// 返回指定WebBrowser中图片<IMG></IMG>中的图内容 /// </summary> /// <p ...

  4. [转载]C#中int和IntPtr相互转换

    方法一. int转IntPtr int i = 12;           IntPtr p = new IntPtr(i); IntPtr转int int myi = (int)p;         ...

  5. jsp java 数据库 乱码总结

    Java中文问题的由来: Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦.原因主要有两方面,Java和JSP文件本身编译时产 ...

  6. linux源代码阅读笔记 fork和execve的区别

    1. man exec就可以知到: The exec() family of functions replaces the current process image with a new proce ...

  7. Selenium如何使用自定义的Firefox配置文件?

    一.自动保存文件 import os from selenium import webdriver fp = webdriver.FirefoxProfile() fp.set_preference( ...

  8. APAC Practice

    2016 round A A. Googol String small && large LL a[]; int dfs(LL pos, int id, bool f) { || po ...

  9. Project Euler 87 :Prime power triples 素数幂三元组

    Prime power triples The smallest number expressible as the sum of a prime square, prime cube, and pr ...

  10. lintcode:Valid Sudoku 判断数独是否合法

    题目: 判断数独是否合法 请判定一个数独是否有效.该数独可能只填充了部分数字,其中缺少的数字用 . 表示. 样例 下列就是一个合法数独的样例. 注意 一个合法的数独(仅部分填充)并不一定是可解的.我们 ...