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 ...
随机推荐
- Java Map按键(Key)排序和按值(Value)排序
Map排序的方式有很多种,两种比较常用的方式:按键排序(sort by key), 按值排序(sort by value).1.按键排序jdk内置的java.util包下的TreeMap<K,V ...
- asp.net timer viewstate
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- Storm入门2-单词计数案例学习
[本篇文章主要是通过一个单词计数的案例学习,来加深对storm的基本概念的理解以及基本的开发流程和如何提交并运行一个拓扑] 单词计数拓扑WordCountTopology实现的基本功能就是不停地读入 ...
- Maven的安装配置
本文主要是针对mac os系统下maven的安装教程. 1.首先验证是否有jdk.java -version,没有需要手工安装 2.maven的下载地址:http://maven.apache.org ...
- What technical details should a programmer of a web application consider before making the site public?
What things should a programmer implementing the technical details of a web application consider bef ...
- Java读取Level-1行情dbf文件极致优化(1)
最近架构一个项目,实现行情的接入和分发,需要达到极致的低时延特性,这对于证券系统是非常重要的.接入的行情源是可以配置,既可以是Level-1,也可以是Level-2或其他第三方的源.虽然Level-1 ...
- 【前端】Node.js学习笔记
module.exports 使用方式: // File Name: hello.js function greet() {/*......*/} // 有下面这两种写法: // 1. module. ...
- Xcode 8 Swift 类似插件方法
Xcode8 Swift使用技巧 1 option + cmd + / 可以弹出注释 2 color 然后加 enter 可以弹出颜色选择 3 #FIXME: 警告 4 #MARK: 备注 ...
- win8/10 特技
今天弄些特技: 1.图片批量命名:选中(1) 2.自动显示记录时间:在记事本中里面写上 .LOG 下次会自动把时间写上. 3.无密码登录:在命令行中输入:netplwiz,取消=>要使用本计算 ...
- Android BinderService 过程
步骤:建立服务器端服务,暴露接口 1.BinderService /** * @Title BinderService.java * @package cn.boxai.binderservice * ...