hdu 1532 Drainage Ditches 【ISAP 】
还是不是很懂算法
先存一个模板先吧~~~
看的这篇学的--
http://www.renfei.org/blog/isap.html
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std; const int maxn = ;
const int INF = ( << ) - ; struct Edge{
int from,to,cap,flow;
}; vector<Edge> edges; int source; // 源点
int sink; // 汇点
int p[maxn]; // 可增广路上的上一条弧的编号
int num[maxn]; // 和 t 的最短距离等于 i 的节点数量
int cur[maxn]; // 当前弧下标
int d[maxn]; // 残量网络中节点 i 到汇点 t 的最短距离
bool visited[maxn]; int num_nodes; vector<int> G[maxn]; // 预处理, 反向 BFS 构造 d 数组
bool bfs()
{
memset(visited, , sizeof(visited));
queue<int> Q;
Q.push(sink);
visited[sink] = ;
d[sink] = ;
while (!Q.empty()) {
int u = Q.front();
Q.pop();
for ( int i = ;i < G[u].size();i++) {
Edge &e = edges[G[u][i]^];
if (!visited[e.from] && e.cap> e.flow) {
visited[e.from] = true;
d[e.from] = d[u] + ;
Q.push(e.from);
}
}
}
return visited[source];
} // 增广
int augment()
{
int u = sink, df = INF;
// 从汇点到源点通过 p 追踪增广路径, df 为一路上最小的残量
while (u != source) {
Edge &e = edges[p[u]];
df = min(df, e.cap - e.flow);
u = edges[p[u]].from;
}
u = sink;
// 从汇点到源点更新流量
while (u != source) {
edges[p[u]].flow += df;
edges[p[u]^].flow -= df;
u = edges[p[u]].from;
}
return df;
} int max_flow()
{
int flow = ;
bfs();
memset(num, , sizeof(num));
for (int i = ; i < num_nodes; i++) num[d[i]]++;
int u = source;
memset(cur, , sizeof(cur));
while (d[source] < num_nodes) {
if (u == sink) {
flow += augment();
u = source;
}
bool advanced = false;
for (int i = cur[u]; i < G[u].size(); i++) {
Edge& e = edges[G[u][i]];
if (e.cap > e.flow && d[u] == d[e.to] + ) {
advanced = true;
p[e.to] = G[u][i];
cur[u] = i;
u = e.to;
break;
}
}
if (!advanced) { // retreat
int m = num_nodes - ;
for ( int i = ;i < G[u].size();i++)
if (edges[G[u][i]].cap > edges[G[u][i]].flow)
m = min(m, d[edges[G[u][i]].to]);
if (--num[d[u]] == ) break; // gap 优化
num[d[u] = m+]++;
cur[u] = ;
if (u != source)
u = edges[p[u]].from;
}
}
return flow;
} void addedges(int from,int to,int cap){
edges.push_back((Edge){from,to,cap,});
edges.push_back((Edge){to,from,,});
int m = edges.size();
G[from].push_back(m-);
G[to].push_back(m-);
} void init(){
edges.clear();
for(int i = ;i < num_nodes;i++) G[i].clear();
} int main(){
int m;
while(scanf("%d %d ",&m,&num_nodes) != EOF){
init();
source = ; sink = num_nodes-;
for(int i = ;i < m;i++){
int u,v,c;
scanf("%d %d %d",&u,&v,&c);u--;v--;
addedges(u,v,c);
}
int res = max_flow();
printf("%d\n",res);
}
return ;
}
再存一个dinic的吧~~~
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <iostream>
#include <algorithm>
using namespace std;
#define lp (p << 1)
#define rp (p << 1|1)
#define getmid(l,r) (l + (r - l) / 2)
#define MP(a,b) make_pair(a,b)
typedef long long ll;
typedef unsigned long long ull;
const int INF = << ;
const int maxn = ; int c[maxn][maxn],n,m,lev[maxn];
int st,ed; void Bfs(){
memset(lev,-,sizeof(lev));
queue<int> Q;
while(!Q.empty()) Q.pop();
Q.push(st);
lev[st] = ;
while(!Q.empty()){
int x = Q.front();Q.pop();
for(int i = ; i <= ed; ++i) if(lev[i] < && c[x][i] > ){
lev[i] = lev[x] + ;
Q.push(i);
}
}
} int Dfs(int p,int minc){
if(p == ed) return minc;
for(int i = ; i <= ed; ++i) if(lev[i] > lev[p] && c[p][i] > ){
int d = Dfs(i,min(c[p][i],minc));
if(d > ){
c[p][i] -= d;
c[i][p] += d;
return d;
}
}
return ;
} int Dinic(){
int max_flow = ,plus;
while(){
Bfs();
if(lev[ed] < ) break;
while((plus = Dfs(,INF)) > ) max_flow += plus;
}
return max_flow;
} int main(){
while(scanf("%d %d",&m,&n) != EOF){
st = ;ed = n;
memset(c,,sizeof(c));
for(int i = ;i <= m;i++){
int u,v,w;
scanf("%d %d %d",&u,&v,&w);
c[u][v] += w;
}
printf("%d\n",Dinic());
}
return ;
}
hdu 1532 Drainage Ditches 【ISAP 】的更多相关文章
- hdoj 1532 Drainage Ditches【最大流模板题】
Drainage Ditches Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- poj 1273 && hdu 1532 Drainage Ditches (网络最大流)
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 53640 Accepted: 2044 ...
- HDU 1532 Drainage Ditches (网络流)
A - Drainage Ditches Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64 ...
- POJ_1273 Drainage Ditches 【网络流】
一.题面 Drainage Ditches 二.分析 网络流的裸题. 1 Edmonds-Karp算法 求解网络流其实就是一个不断找增广路,然后每次找到一条增广路后更新残余网络的一个过程. EK算法主 ...
- HDU 1532 Drainage Ditches 分类: Brush Mode 2014-07-31 10:38 82人阅读 评论(0) 收藏
Drainage Ditches Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- POJ 1273 || HDU 1532 Drainage Ditches (最大流模型)
Drainage DitchesHal Burch Time Limit 1000 ms Memory Limit 65536 kb description Every time it rains o ...
- HDU1532 Drainage Ditches 【最大流量】
Drainage Ditches Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- HDU 1532 Drainage Ditches (最大网络流)
Drainage Ditches Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) To ...
- hdu 1532 Drainage Ditches(最大流)
Drainage Dit ...
随机推荐
- Laravel5.6安裝:Warning: require(../vendor/autoload.php): failed to open stream: No such file or directory
在phpstudy下使用composer+laravel安装器的方式安装了Laravel,但是访问的时候报错: Warning: require(D:\phpstudy\WWW\public\mybl ...
- jQuery样式操作
获取样式和设置样式 <p class='myClass' title='this is p'>this is p</p> 样式其实就是class属性所以设置和获取样式都能用a ...
- PART 5: INTEGRATING SPRING SECURITY WITH SPRING BOOT WEB
转自:http://justinrodenbostel.com/2014/05/30/part-5-integrating-spring-security-with-spring-boot-web/ ...
- [luogu2052 NOI2011] 道路修建 (树形dp)
传送门 Description 在 W 星球上有 n 个国家.为了各自国家的经济发展,他们决定在各个国家 之间建设双向道路使得国家之间连通.但是每个国家的国王都很吝啬,他们只愿 意修建恰好 n – 1 ...
- 【模板】 非旋转treap
模板:luogu P3369 [模板]普通平衡树 code: #include <cstdio> #include <cstdlib> const int MAX_N=1000 ...
- /etc/default/useradd文件内容及对应功能
1.GROUP=100 #依赖于/etc/login.defs的USE RGRUUPS_ENAB参数,如果为no,则在此处控制 2.HOME=/home #把用户的家路径健在/home中 3.INAC ...
- python第七周:反射、异常
1.反射: 1.1定义:通过字符串映射或修改程序运行时的状态.属性.方法 1.2有以下四个方法: (1)hasattr(object,str) 判断object对象中是否有对应的方法或属性,返回值:T ...
- SSM知识巩固
------------------------- 绑定页面提交的多个数据 绑定数组 --------------------------------------- 绑定list(需求:批量修改商品 ...
- SQL优化的思路及基本原则(mysql)
SQL优化的思路: 1.优化更需要优化的sql: 2.定位优化对象的性能瓶颈:优化前需了解查询的瓶颈是IO还是CPU,可通过PROFILING很容易定位查询的瓶颈. 3.明确优化目标: 4.从 ...
- js 文档加载完成之后执行 备用
//文档加载完成之后执行 (function(){ var _globeCallback; window.$$ = function(callback){ _globeCallback = callb ...