uva 820(最大流)
最大流的裸题,直接贴了模板。
#include <cstdio>
#include <iostream>
#include <sstream>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <algorithm>
using namespace std;
#define ll long long
#define _cle(m, a) memset(m, a, sizeof(m))
#define repu(i, a, b) for(int i = a; i < b; i++)
#define repd(i, a, b) for(int i = b; i >= a; i--)
#define sfi(n) scanf("%d", &n)
#define pfi(n) printf("%d\n", n)
#define sfi2(n, m) scanf("%d%d", &n, &m)
#define pfi2(n, m) printf("%d %d\n", n, m)
#define pfi3(a, b, c) printf("%d %d %d\n", a, b, c)
#define maxn 101
const int inf = 0x3f3f3f3f;
struct SAP
{
int cap[maxn][maxn], flow[maxn][maxn];///容量,流量
int n; ///顶点数
int h[maxn], vh[maxn], source, sink;
///某个点到sink点的最短距离,h[i]的计数, source点, sink点
void init(int n)
{
this->n = n;
memset(cap, , sizeof(cap));
}
void addCap(int i, int j, int val)
{
cap[i][j] += val;
}
/**
参数: 节点编号,和该节点能用的最大流量
返回: 此次找到的最大流量
*/
int sap(const int idx, const int maxCap)
{
if(idx == sink)
return maxCap;///最后一个结点。。。
int l = maxCap, d, minH = n;
///此次的残余流量, 某次使用的流量, 邻居的最小流量
for(int i = ; i < n; i ++)
{
if(cap[idx][i]-flow[idx][i] > )
{
if(h[idx]==h[i]+)
{
d = sap(i, min(l, cap[idx][i]-flow[idx][i]));
///下次找到的流量
flow[idx][i] += d; ///更新边的残余流量
flow[i][idx] -= d;
l -= d; ///更新本次参与流量
if(h[source]==n||l==) return maxCap-l;///GAP
}
minH=min(minH, h[i]+); ///更新h[idx]
}
}
if(l == maxCap) ///not found!
{
vh[h[idx]] --; ///GAP
vh[minH] ++;
if(vh[h[idx]] == )
h[source] = n;
h[idx] = minH;
}
return maxCap - l;
}
int solve(int source, int sink)
{
if(source == sink) return inf;
this->sink = sink;
this->source = source;
memset(flow, , sizeof(flow));
memset(h, , sizeof(h));
memset(vh, , sizeof(vh));
int ans = ;
while(h[source] != n)
ans += sap(source, inf);
return ans;
}
}sap; int main()
{
int s, t, c, n, x, y, w, kase = ;
while(sfi(n) && n)
{
kase++;
sap.init(n);
sfi2(s, t), sfi(c);
s--, t--;
repu(i, , c)
{
sfi2(x, y), sfi(w);
x--, y--;
sap.addCap(x, y, w);
sap.addCap(y, x, w);
}
printf("Network %d\n", kase);
printf("The bandwidth is %d.\n\n", sap.solve(s, t));
}
return ;
}
uva 820(最大流)的更多相关文章
- UVA 820 --- POJ 1273 最大流
找了好久这两个的区别...UVA820 WA了 好多次.不过以后就做模板了,可以求任意两点之间的最大流. UVA 是无向图,因此可能有重边,POJ 1273是有向图,而且是单源点求最大流,因此改模板的 ...
- UVA 820 Internet Bandwidth 因特网宽带(无向图,最大流,常规)
题意:给一个无向图,每条边上都有容量的限制,要求求出给定起点和终点的最大流. 思路:每条无向边就得拆成2条,每条还得有反向边,所以共4条.源点汇点已经给出,所以不用建了.直接在图上跑最大流就可以了. ...
- UVA - 820 Internet Bandwidth(最大流模板题)
题目: 思路: 直接套最大流的模板就OK了,注意一下输出的格式. 代码: #include <bits/stdc++.h> #define inf 0x3f3f3f3f #define M ...
- UVA - 820 Internet Bandwidth (因特网带宽)(最大流)
题意:给出所有计算机之间的路径和路径容量后,求出两个给定结点之间的流通总容量.(假设路径是双向的,且两方向流动的容量相同) 分析:裸最大流.标号从1开始,初始化的时候注意. #pragma comme ...
- UVa 820 因特网带宽(最大流)
https://vjudge.net/problem/UVA-820 题意: 给出所有计算机之间的路径和路径容量后求出两个给定结点之间的流通总容量. 思路: 裸的最大流问题.注意有个比较坑的地方,最后 ...
- 紫书 习题 11-3 UVa 820 (最大流裸题)
注意这道题是双向边, 然后直接套模板就ok了. #include<cstdio> #include<algorithm> #include<vector> #inc ...
- UVa 11082 & 最大流的行列模型
题意: 给出一个矩阵前i行的和与前j列的和,(i∈[1,r],j属于[1,c]),每个元素ai,j∈[1,20],请你还原出这个矩阵,保证有解. SOL: 给网络流建模跪了,神一样的建图,如果我我会怎 ...
- uva 12549 最大流
思路:这题的原型题是比较经典的网络流.原型题模型就是把所有的障碍去掉. 有障碍做法还是一样的,只用将每个列和行重新划分,求最大流就行了. #include <cstring> #inclu ...
- uva 10330 最大流
拆点 将节点 i 的容量拆成从 i 到 i+n 的边的容量 套用最大流模板 ac #include <cstdio> #include <cstdlib> #include ...
随机推荐
- 剑指offer 复制构造函数
复制构造函数: A(const A &other){value=other.value;} 也就是传值参数改为常量引用. #include<iostream> using name ...
- Java 基础练习题2
按要求编写Java程序: (1)编写一个接口:InterfaceA,只含有一个方法int method(int n): (2)编写一个类:ClassA来实现接口InterfaceA,实现int met ...
- 【前端】screenX/Y, clientX/Y, pageX/Y 的区别
一图胜千言. 做了一个图:
- java 内核
摘自:http://www.cubrid.org/blog/tags/Java/
- java(2)之前往对象村
这次说一说面向对象与面向过程的区别以及面向对象的优点.
- linux开发缩写
1.CONFIG_OF 在一些驱动中经常看到#ifdef CONFIG_OF,这里的OF是Open Firmware. Open Firmware. This was invented long ti ...
- Linux网络配置基础
linux网络配置常见有两种:桥接模式(Bridge)与NAT模式,还有一种Host-Only模式由于其局限性通常被舍弃就不加以说明了,下面我们介绍下桥接模式(Bridge)和NAT模式. 桥接模式( ...
- JSP页面和属性命名规范
1.页面命名: 登陆 Login注册 Register用户 User创建 Create修改 Update删除 Delete查询 Selete控制器 Controller用户名 Username密码 ...
- MySQL5.0+提示字段没有默认值(doesn’t have a default value)的解决方法
方法一: 打开my.ini,查找 sql-mode=”STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION” 修改为 sql ...
- CentOS 6.3 安装过程
1.放入光盘 2.安装欢迎界面 进入安装欢迎界面,有四个选项: 1.“Install or upgrade an existing system”:安装或升级现有系统 2. “Install syst ...