hdu3549 最大流模板题
来源:互联网 发布:破解摄像头软件下载 编辑:程序博客网 时间:2024/05/29 23:46
最大流dinic算法,套模板1A
代码:
#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#define maxn 105using namespace std;int map[maxn][maxn]; //邻接矩阵存储图int dis[maxn]; //距离源点的距离int q[maxn*maxn],f,r; //bfs队列int n,m,ans;int bfs(){ memset(dis,-1,sizeof(dis)); //初始化为-1 dis[1] = 0; f = r = 0; q[r++] = 1; while(f < r) { int j = q[f++]; for(int i = 1; i <= n; i++) if(dis[i] < 0&&map[j][i] > 0) //如果i没有没有被别的点通到,并且j可以通到i,那么i的步数就是j的步数加一 { dis[i] = dis[j] + 1; q[r++] = i; } } if(dis[n] > 0) return 1; //如果能够走到n else return 0;}//Find代表一次增广,函数返回本次增广的流量,返回0表示无法增广int find(int x,int low){ // int i,a = 0; if(x == n) return low; for(i = 1; i <= n; i++) if(map[x][i] > 0&&dis[i] == dis[x] + 1&&(a = find(i,min(low,map[x][i])))) //从i往后找最小的流量,就是一条增广路,并且此次流量不等于0 { map[x][i] -= a; map[i][x] += a; //回退边 return a; } return 0;}int main(){ int t,ca = 1; scanf("%d",&t); while(t--) { int a,b,val,tans; scanf("%d%d",&n,&m); memset(map,0,sizeof(map)); for(int i = 0; i < m; i++) { scanf("%d%d%d",&a,&b,&val); map[a][b] += val; //可能会出现重边 } ans = 0; while(bfs()) //只要bfs能够进入终点 { while(tans = find(1,0x7fffffff)) ans += tans; } printf("Case %d: %d\n",ca++,ans); }}
0 0
- hdu3549 最大流模板题
- hdu3549(又是最大流模板题)
- hdu3549及最大流dinic模板
- hdu3549及最大流ISAP模板
- hdu3549 Flow Problem 最大流模板 isap
- HDU3549最大流模板学习题
- hdu3549(最大流ford-fulkerson模板)
- HDU3549(最大流入门模板题)
- hdu3549最大流
- 最大流HDU3549
- HDU3549--最大流水题
- hdu3549 (dinic求最大流)
- HDU3549 Flow Problem 【最大流】
- HDU3549 Flow Problem(最大流)
- hdu3549 Flow Problem【最大流】
- hdu3549 网络流ek模板
- 网络流dinic模板 hdu3549
- hdu3549(网络流入门题-最大流的sap算法)
- 在poll的admin文件下添加,date_hierarchy = 'pub_date'字段会报错
- Android Studio配置Github
- WEB网站测试
- 2015 多校联赛 ——HDU5353(构造)
- Android studio SDK下载相应版本的Android源码
- hdu3549 最大流模板题
- Roman to Integer
- 匿名内部类
- dojox.grid.DataGrid 编程篇(一)- 方法与事件
- avocwozkgwbrnak
- FAST RCNN安装配置精华
- oracle创建和维护表
- 使用java api操作Hadoop文件
- Memcached简介