HDU3549 Flow Problem(最大流)
2016-03-13 12:05
330 查看
给你一个网络流的图,求出它的最大流,当个模板练习吧
#include<cstdio> #include<cstring> #define MAXN 50 using namespace std; int c[MAXN][MAXN],d[MAXN],vd[MAXN],flow,n,m,s,t,x,y,z; inline int Min(int a,int b) {return a<b?a:b;} int aug(int i,int augco) { int j,augc = augco,mind = n-1,delta; if(i == n) return augco; for(j = 1; j <= n; j++) if(c[i][j] > 0) { if(d[i] == d[j]+1) { delta = Min(c[i][j],augc); delta = aug(j,delta); c[i][j] -= delta; c[j][i] += delta; augc -= delta; if(d[1] >= n) return augco-augc; if(augc == 0) break; } if(d[j] < mind) mind = d[j]; } if(augc == augco) { vd[d[i]]--; if(vd[d[i]] == 0) d[1] = n; d[i] = mind+1; vd[d[i]]++; } return augco-augc; } void sap() { flow = 0; memset(d,0,sizeof d); memset(vd,0,sizeof vd); vd[0] = n; while(d[1] < n) flow += aug(1,0x3f3f3f3f); } int main() { int T; scanf("%d",&T); for(int k = 1; k <= T; k++) { scanf("%d%d",&n,&m); memset(c,0,sizeof c); for(int i = 1; i <= m; i++) { scanf("%d%d%d",&x,&y,&z); c[x][y] += z; } sap(); printf("Case %d: %d\n",k,flow); } }
相关文章推荐
- 界面传值
- 一、冒泡排序
- 一、冒泡排序
- java 定时任务 3种
- tabhost 通过popup跳转activity
- C++实现矩阵压缩
- Log4J日志配置详解
- 检查iOS项目中是否使用了IDFA
- SIM900B GPRS模块————打电话、发短信、接电话
- 手把手教你在好友不知道的情况下,检查哪个微信好友删了你。
- Best practices for the logging REST API
- .Net程序员学习Linux最简单的方法
- 小白逆袭之路
- MySQL中复制数据表中的数据到新表中的操作教程
- Android面试题
- 自定义View实例——雨滴落下
- 深度学习(三十)贪婪深度字典学习
- jquery插件-表单验证插件-validator对象
- SQL Server系统表sysobjects介绍与使用(转))
- 机电传动控制3