UVA - 820 Internet Bandwidth (因特网带宽)(最大流)
题意:给出所有计算机之间的路径和路径容量后,求出两个给定结点之间的流通总容量。(假设路径是双向的,且两方向流动的容量相同)
分析:裸最大流。标号从1开始,初始化的时候注意。
- #pragma comment(linker, "/STACK:102400000, 102400000")
- #include<cstdio>
- #include<cstring>
- #include<cstdlib>
- #include<cctype>
- #include<cmath>
- #include<iostream>
- #include<sstream>
- #include<iterator>
- #include<algorithm>
- #include<string>
- #include<vector>
- #include<set>
- #include<map>
- #include<stack>
- #include<deque>
- #include<queue>
- #include<list>
- #define Min(a, b) ((a < b) ? a : b)
- #define Max(a, b) ((a < b) ? b : a)
- const double eps = 1e-8;
- inline int dcmp(double a, double b){
- if(fabs(a - b) < eps) return 0;
- return a > b ? 1 : -1;
- }
- typedef long long LL;
- typedef unsigned long long ULL;
- const int INT_INF = 0x3f3f3f3f;
- const int INT_M_INF = 0x7f7f7f7f;
- const LL LL_INF = 0x3f3f3f3f3f3f3f3f;
- const LL LL_M_INF = 0x7f7f7f7f7f7f7f7f;
- const int dr[] = {0, 0, -1, 1, -1, -1, 1, 1};
- const int dc[] = {-1, 1, 0, 0, -1, 1, -1, 1};
- const int MOD = 1e9 + 7;
- const double pi = acos(-1.0);
- const int MAXN = 100 + 10;
- const int MAXT = 10000 + 10;
- using namespace std;
- struct Edge{
- int from, to, cap, flow;
- Edge(int fr, int t, int c, int fl):from(fr), to(t), cap(c), flow(fl){}
- };
- struct Dinic{
- int n, m, s, t;
- vector<Edge> edges;
- vector<int> G[MAXN];
- bool vis[MAXN];
- int d[MAXN];
- int cur[MAXN];
- void init(int n){
- edges.clear();
- for(int i = 1; i <= n; ++i) G[i].clear();//标号从1开始
- }
- void AddEdge(int from, int to, int cap){
- edges.push_back(Edge(from, to, cap, 0));
- edges.push_back(Edge(to, from, 0, 0));
- m = edges.size();
- G[from].push_back(m - 2);
- G[to].push_back(m - 1);
- }
- bool BFS(){
- memset(vis, 0, sizeof vis);
- queue<int> Q;
- Q.push(s);
- d[s] = 0;
- vis[s] = 1;
- while(!Q.empty()){
- int x = Q.front();
- Q.pop();
- for(int i = 0; i < G[x].size(); ++i){
- Edge& e = edges[G[x][i]];
- if(!vis[e.to] && e.cap > e.flow){
- vis[e.to] = 1;
- d[e.to] = d[x] + 1;
- Q.push(e.to);
- }
- }
- }
- return vis[t];
- }
- int DFS(int x, int a){
- if(x == t || a == 0) return a;
- int flow = 0, f;
- for(int& i = cur[x]; i < G[x].size(); ++i){
- Edge& e = edges[G[x][i]];
- if(d[x] + 1 == d[e.to] && (f = DFS(e.to, Min(a, e.cap - e.flow))) > 0){
- e.flow += f;
- edges[G[x][i] ^ 1].flow -= f;
- flow += f;
- a -= f;
- if(a == 0) break;
- }
- }
- return flow;
- }
- int Maxflow(int s, int t){
- this -> s = s;
- this -> t = t;
- int flow = 0;
- while(BFS()){
- memset(cur, 0, sizeof cur);
- flow += DFS(s, INT_INF);
- }
- return flow;
- }
- }di;
- int main(){
- int n;
- int kase = 0;
- while(scanf("%d", &n) == 1){
- if(!n) return 0;
- di.init(n);
- int s, t, c;
- scanf("%d%d%d", &s, &t, &c);
- for(int i = 0; i < c; ++i){
- int x, y, v;
- scanf("%d%d%d", &x, &y, &v);
- di.AddEdge(x, y, v);//路径双向
- di.AddEdge(y, x, v);
- }
- printf("Network %d\nThe bandwidth is %d.\n\n", ++kase, di.Maxflow(s, t));
- }
- return 0;
- }
UVA - 820 Internet Bandwidth (因特网带宽)(最大流)的更多相关文章
- UVA 820 Internet Bandwidth 因特网宽带(无向图,最大流,常规)
题意:给一个无向图,每条边上都有容量的限制,要求求出给定起点和终点的最大流. 思路:每条无向边就得拆成2条,每条还得有反向边,所以共4条.源点汇点已经给出,所以不用建了.直接在图上跑最大流就可以了. ...
- UVA - 820 Internet Bandwidth(最大流模板题)
题目: 思路: 直接套最大流的模板就OK了,注意一下输出的格式. 代码: #include <bits/stdc++.h> #define inf 0x3f3f3f3f #define M ...
- UVa 820 Internet Bandwidth (裸板网络流)
题意:有一个计算机网络,输入节点数n,输入网络流源点和汇点src,des,再输入双向边数m.给出m条边的负载,求最大流. 析:直接上网络流的最大流. 代码如下: #pragma comment(lin ...
- UVA 820 Internet Bandwidth
题意: 给出双向图,求给出两点的流通总流量. 分析: 网络流中的增广路算法. 代码: #include <iostream>#include <cstring>#include ...
- UVA 820 --- POJ 1273 最大流
找了好久这两个的区别...UVA820 WA了 好多次.不过以后就做模板了,可以求任意两点之间的最大流. UVA 是无向图,因此可能有重边,POJ 1273是有向图,而且是单源点求最大流,因此改模板的 ...
- UVA 10480 Sabotage (网络流,最大流,最小割)
UVA 10480 Sabotage (网络流,最大流,最小割) Description The regime of a small but wealthy dictatorship has been ...
- light oj 1153 - Internet Bandwidth【网络流无向图】
1153 - Internet Bandwidth PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 ...
- Acme Corporation UVA - 11613 拆点法+最大费用最大流(费用取相反数)+费用有正负
/** 题目:Acme Corporation UVA - 11613 拆点法+最大费用最大流(费用取相反数)+费用有正负 链接:https://vjudge.net/problem/UVA-1161 ...
- UVa 820 因特网带宽(最大流)
https://vjudge.net/problem/UVA-820 题意: 给出所有计算机之间的路径和路径容量后求出两个给定结点之间的流通总容量. 思路: 裸的最大流问题.注意有个比较坑的地方,最后 ...
随机推荐
- Android View转换成图片保存
package zhangphil.viewtoimage; import java.io.File;import java.io.FileOutputStream; import android.o ...
- Mac OS 下升级gcc遇到的坑
为了升级gcc,原来版本是4.8,想升级到4.9,因为在Mac上安装cocoNLP一直出错,想试试看是不是gcc版本太低的原因,因此在此想要升级到4.9 经历了三个问题: - brew update太 ...
- Oracle数据库自带了decode()函数
Oracle数据库自带了decode()函数,函数的使用方法如下: SELECT emp.ename, emp.job, emp.sal, decode(job, 'manager ...
- 转:NGINX 基于nginx_upstream_check_module-master 健康检测及平滑升级
https://www.cnblogs.com/linxizhifeng/p/7075325.html linux的nginx下安装tengine的nginx_upstream_check_modul ...
- Day3-H-Alice and Bob HDU4268
Alice and Bob's game never ends. Today, they introduce a new game. In this game, both of them have N ...
- Plcsim 模拟IO访问故障 OB122组织块
假设在OB1 中用 如下指令 T PQW20 实际在组态的时候就没有QW20 这个地址 所以会显示访问IO 错误 我在OB122 中设置一个变量 进入一次 加1 可以看到每个扫描周期都要调用一次OB1 ...
- POJ 3685:Matrix 二分
Matrix Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 5489 Accepted: 1511 Descriptio ...
- 2-10 就业课(2.0)-oozie:10、伪分布式环境转换为HA集群环境
hadoop 的基础环境增强 HA模式 HA是为了保证我们的业务 系统 7 *24 的连续的高可用提出来的一种解决办法,现在hadoop当中的主节点,namenode以及resourceManager ...
- ROS学习笔记3-基础课程之文件系统向导
准备工作需要使用如下命令安装ros的教程: $ sudo apt-get install ros-<distro>-ros-tutorials 其中,distro为所用ros的发行版本,该 ...
- @Autowired 和 @ Resource 的区别
转 都是用来装配Bean的注解.都可以写在字段上,或写在setter方法上. @Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以 ...