题目:

思路:

直接套最大流的模板就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. 加密散列算法——SHA-1

    与MD5算法类似,SHA-1算法也是在接收到消息后产生消息摘要,能够用来验证数据的完整性. 不同的是SHA1会产生一个160位的消息摘要(MD5产生的是128位). 其它的性质之类的不多说(请參考前面 ...

  2. 简易 DBUtil 封装

    Dao包结构图: 1.首先连接数据库 package com.util.db; import java.sql.Connection; import java.sql.DriverManager; i ...

  3. java操作linux,调用shell命令

    import org.junit.jupiter.api.Test; import java.io.BufferedReader; import java.io.IOException; import ...

  4. MySQL 基础 —— 数据类型、各种变量

    1. 基本数据类型 char:prod_id char(10),括号内的内容表示字符的长度 decimal:十进制,不带参数为整数(四舍五入) text:文本类型,长度不限 2. 日期和时间处理函数 ...

  5. 蓝书4.1-4.4 树状数组、RMQ问题、线段树、倍增求LCA

    这章的数据结构题很真实 T1 排队 bzoj 1699 题目大意: 求静态一些区间的最大值-最小值 思路: ST表裸题 #include<iostream> #include<cst ...

  6. 通过usb访问mtp设备(ubuntu12.04) (转载)

    转自:http://robert.penz.name/658/howto-access-mtp-devices-via-usb-on-ubuntu-12-04/ A friend asked me h ...

  7. 靶形数独 2009年NOIP全国联赛提高组(搜索)

    靶形数独 2009年NOIP全国联赛提高组  时间限制: 4 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond     题目描述 Description 小城和小华都是热爱数 ...

  8. “仿QQ局域网聊天软件”项目-常用编程技巧总结

    1 信号槽篇 qqLogin loginDialog; QQ mainDialog; loginDialog.show(); //连接登陆窗口和主窗口 QObject::connect(&lo ...

  9. Hdu 5285 wyh2000 and pupil (bfs染色判断奇环) (二分图匹配)

    题目链接: BestCoder Round #48 ($) 1002 题目描述: n个小朋友要被分成两班,但是有些小朋友之间是不认得的,所以规定不能把不认识的小朋友分在一个班级里面,并且一班的人数要比 ...

  10. C#方法的一些规则

    C# 方法 一个方法是把一些相关的语句组织在一起,用来执行一个任务的语句块.每一个 C# 程序至少有一个带有 Main 方法的类. 要使用一个方法,您需要: 定义方法 调用方法 下面是方法的各个元素: ...