还是不是很懂算法

先存一个模板先吧~~~

看的这篇学的--

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 】的更多相关文章

  1. hdoj 1532 Drainage Ditches【最大流模板题】

    Drainage Ditches Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  2. poj 1273 && hdu 1532 Drainage Ditches (网络最大流)

    Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 53640   Accepted: 2044 ...

  3. HDU 1532 Drainage Ditches (网络流)

    A - Drainage Ditches Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64 ...

  4. POJ_1273 Drainage Ditches 【网络流】

    一.题面 Drainage Ditches 二.分析 网络流的裸题. 1 Edmonds-Karp算法 求解网络流其实就是一个不断找增广路,然后每次找到一条增广路后更新残余网络的一个过程. EK算法主 ...

  5. 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) ...

  6. POJ 1273 || HDU 1532 Drainage Ditches (最大流模型)

    Drainage DitchesHal Burch Time Limit 1000 ms Memory Limit 65536 kb description Every time it rains o ...

  7. HDU1532 Drainage Ditches 【最大流量】

    Drainage Ditches Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  8. HDU 1532 Drainage Ditches (最大网络流)

    Drainage Ditches Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) To ...

  9. hdu 1532 Drainage Ditches(最大流)

                                                                                            Drainage Dit ...

随机推荐

  1. C#读取EXCEL 并输出到文本框

    #region 加载数据到DataGraidView private void button1_Click(object sender, EventArgs e) { string excelPath ...

  2. css3媒介查询使用规则小结

    响应式布局可以为不同终端的用户提供更加舒适的界面和更好的用户体验,而且随着目前大屏幕移动设备的普及,用大势所趋来形容也不为过. 用一句话来说:使用同一套Html代码来适配不同设备和满足不同场景不同用户 ...

  3. Spring Boot project with static content generates 404 when running jar

    转自:http://stackoverflow.com/questions/21358403/spring-boot-project-with-static-content-generates-404 ...

  4. Java web课程学习之Servlet

    Servlet简介   (1) Servlet本质上就是一个Java类,只不过运行在Servlet容器中 (2) Servlet的功能: ① 创建并返回客户请求的动态HTML页面 ② 创建可嵌入到现有 ...

  5. redi通过哨兵sentinel实现主从切换

    本次实验主要为了让哨兵监听redis主从复制,当主节点关闭后,哨兵会选举一台从节点成为主节点,并且让其他从节点变成新主节点得从节点 本次理论需要三台机器,一主两从,为了方便用一台服务器开启三个实例,一 ...

  6. [Design]制作磨砂效果

    比较适合运用到网页或者APP的设计当中,推荐过来和飞特的朋友们一起分享学习了,先来看看最终的效果图吧 具体的制作步骤如下:

  7. POJ 2019

    简单的RMQ,可我怎么写都WA.不明白,找了一个和我相似的贴过了,要赶着去外婆家. #include <iostream> #include <algorithm> #incl ...

  8. spring4和hibernate4.0.0的整合

    1.在myeclipse以下创建一个javaproject或者webproject,我创建的时webproject,用的myeclipse2013 2.导入spring的依赖包 3.导入hiberna ...

  9. linux c获取mac

    #include <stdio.h> #include <string.h> #include <net/if.h> #include <sys/ioctl. ...

  10. winform显示系统托盘,双击图片图表显示窗体,退出窗体是否提示

    private void Form1_FormClosing(object sender, FormClosingEventArgs e) { DialogResult result = Messag ...