题目:

思路:

直接套最大流的模板就OK了,注意一下输出的格式。

代码:

  1. #include <bits/stdc++.h>
  2. #define inf 0x3f3f3f3f
  3. #define MAX 1000000000
  4. #define mod 1000000007
  5. #define FRE() freopen("in.txt","r",stdin)
  6. #define FRO() freopen("out.txt","w",stdout)
  7. using namespace std;
  8. typedef long long ll;
  9. typedef pair<int,ll> pii;
  10. const int maxn = ;
  11. int n;
  12. struct Edge {
  13. int from,to,cap,flow;
  14. Edge(int from,int to,int cap,int flow):from(from),to(to),cap(cap),flow(flow) {}
  15. };
  16.  
  17. struct Dinic {
  18. int n,m,s,t;
  19. vector<Edge> edges;
  20. vector<int> G[maxn];
  21. bool vis[maxn];
  22. int d[maxn];
  23. int cur[maxn];
  24. void init(){
  25. for(int i=; i<maxn; i++){
  26. G[i].clear();
  27. }
  28. edges.clear();
  29. }
  30.  
  31. void AddEdge(int from,int to,int cap) {
  32. edges.push_back(Edge(from,to,cap,));
  33. edges.push_back(Edge(to,from,,));
  34. m = edges.size();
  35. G[from].push_back(m-);
  36. G[to].push_back(m-);
  37. }
  38. bool BFS(){
  39. memset(vis,,sizeof(vis));
  40. queue<int>que;
  41. que.push(s);
  42. d[s] = ;
  43. vis[s] = ;
  44. while(!que.empty()){
  45. int x = que.front(); que.pop();
  46. for(int i=; i<G[x].size(); i++){
  47. Edge& e = edges[G[x][i]];
  48. if(!vis[e.to] && e.cap>e.flow){
  49. vis[e.to] = ;
  50. d[e.to] = d[x]+;
  51. que.push(e.to);
  52. }
  53. }
  54. }
  55. return vis[t];
  56. }
  57.  
  58. int DFS(int x,int a){
  59. if(x == t || a==) return a;
  60. int flow = ,f;
  61. for(int i=cur[x]; i<G[x].size(); i++){
  62. Edge&e = edges[G[x][i]];
  63. if(d[x]+ == d[e.to] && (f=DFS(e.to,min(a,e.cap-e.flow)))>){
  64. e.flow += f;
  65. edges[G[x][i]^].flow -= f;
  66. flow += f;
  67. a -= f;
  68. if(a==) break;
  69. }
  70. }
  71. return flow;
  72. }
  73.  
  74. int MaxFlow(int s,int t){
  75. this->s = s; this->t = t;
  76. int flow = ;
  77. while(BFS()){
  78. memset(cur,,sizeof(cur));
  79. flow += DFS(s,inf);
  80. }
  81. return flow;
  82. }
  83. }dic;
  84.  
  85. int main(){
  86. int kase = ;
  87. while(scanf("%d",&n) && n){
  88. dic.init();
  89. int ss,tt,cc,s,t,c;
  90. scanf("%d%d%d",&ss,&tt,&cc);
  91. for(int i=; i<cc; i++){
  92. scanf("%d%d%d",&s,&t,&c);
  93. dic.AddEdge(s,t,c);
  94. dic.AddEdge(t,s,c);
  95. }
  96. int ans = dic.MaxFlow(ss,tt);
  97. printf("Network %d\n",++kase);
  98. printf("The bandwidth is %d.\n\n",ans);
  99. }
  100. return ;
  101. }

UVA - 820 Internet Bandwidth(最大流模板题)的更多相关文章

  1. UVA 820 Internet Bandwidth 因特网宽带(无向图,最大流,常规)

    题意:给一个无向图,每条边上都有容量的限制,要求求出给定起点和终点的最大流. 思路:每条无向边就得拆成2条,每条还得有反向边,所以共4条.源点汇点已经给出,所以不用建了.直接在图上跑最大流就可以了. ...

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

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

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

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

  4. UVA 820 Internet Bandwidth

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

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

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

  6. HDU-3549 最大流模板题

    1.HDU-3549   Flow Problem 2.链接:http://acm.hdu.edu.cn/showproblem.php?pid=3549 3.总结:模板题,参考了 http://ww ...

  7. 【网络流#2】hdu 1533 - 最小费用最大流模板题

    最小费用最大流,即MCMF(Minimum Cost Maximum Flow)问题 嗯~第一次写费用流题... 这道就是费用流的模板题,找不到更裸的题了 建图:每个m(Man)作为源点,每个H(Ho ...

  8. 【网络流#1】hdu 3549 - 最大流模板题

    因为坑了无数次队友 要开始学习网络流了,先从基础的开始,嗯~ 这道题是最大流的模板题,用来测试模板好啦~ Edmonds_Karp模板 with 前向星 时间复杂度o(V*E^2) #include& ...

  9. POJ 1273 - Drainage Ditches - [最大流模板题] - [EK算法模板][Dinic算法模板 - 邻接表型]

    题目链接:http://poj.org/problem?id=1273 Time Limit: 1000MS Memory Limit: 10000K Description Every time i ...

随机推荐

  1. 利用JProfile 7分析内存OOM

    今天发现一个OOM问题,想来可能是有部分内存没有正确释放导致的 于是想到了之前使用的JProfile来分析一下 由于大概知道哪个类没有释放,可以在Memory Views里看一下对应的类有多少实例来确 ...

  2. Ubuntu16.04下搭建开发环境及编译tiny4412 Android系统【转】

    本文转载自:http://blog.csdn.net/songze_lee/article/details/72808631 版权声明:本文为博主原创文章,未经博主允许不得转载. 1.安装ssh服务器 ...

  3. YTU 2697: 血型统计

    2697: 血型统计 时间限制: 1 Sec  内存限制: 128 MB 提交: 405  解决: 164 题目描述 黑猫警长在犯罪现场发现了一些血迹,现已经委托检验机构确定了血型,需要统计各种血型的 ...

  4. ECS服务器配置密钥登录及常用日志

    一.介绍 1.SSH(22端口)是Secure Shell Protocol的简写,由IETF网络工作小组(Network Working Group)制定:在进行数据传输之前,SSH先对联机数据包通 ...

  5. C++中虚析构函数的作用 (转载)

    转自:http://blog.csdn.net/starlee/article/details/619827 我们知道,用C++开发的时候,用来做基类的类的析构函数一般都是虚函数.可是,为什么要这样做 ...

  6. bzoj 1677: [Usaco2005 Jan]Sumsets 求和【dp】

    设f[i]为i的方案数,f[1]=1,考虑转移,如果是奇数,那么就是f[i]=f[i-1]因为这1一定要加:否则f[i]=f[i-1]+f[i>>1],就是上一位+1或者i/2位所有因子乘 ...

  7. AMD的规范使用

    1.解决命名冲突 2.解决繁琐的文件依赖 3. 可读性.可依赖性 参考这里 // foobar.js // 私有变量 var   test = 123: //  公有方法 function  foot ...

  8. Linux之线程相关命令及常用命令

    查进程 top命令:查看系统的资源状况.#top top -d 10     //指定系统更新进程的时间为10秒 ps:查看当前用户的活动进程.#ps -A ps命令查找与进程相关的PID号: ps ...

  9. C#常量知识整理

    整数常量 整数常量可以是十进制.八进制或十六进制的常量.前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,没有前缀则表示十进制. 整数常量也可以有后缀,可以是 U 和 L 的组合,其中,U ...

  10. 所有版本chrome、chromedriver、firefox下载链接

    1. 所有版本chrome下载 是不是很难找到老版本的chrome?博主收集了几个下载chrome老版本的网站,其中哪个下载的是原版的就不得而知了. http://www.slimjet.com/ch ...