Hdu 1532 && Hdu 3549 简单最大流初学者必做题
来源:互联网 发布:英语新闻听力 知乎 编辑:程序博客网 时间:2024/05/20 11:19
昨天花费以上午学了简单最大流,对于最大流有了一定的了解,而这两道题,正好练练手,代码都是一样的,下面仅仅附上1532这道题
问题:
从s点能流入到t点的最大值。
解决办法:
EK算法:
每次找出一条到达t点的路然后更新该条路上的正向流量,和反向流量,如果找不到了路,说明当前一是最大流。下面附上代码。
#include<cstdio>#include<queue>#include<cstring>#include<iostream>using namespace std;int cap[205][205],flow[205][205],n,m;int Max_flow(){ int a[207]; queue<int> q; memset(flow,0,sizeof(flow)); int s = 1,t = m,f = 0,p[1001]; while(1) { memset(a,0,sizeof(a)); q.push(s); a[s] = 9999999; while(!q.empty()) { int u = q.front();q.pop(); for(int v =1;v<=m;v++) { if(!a[v]&&cap[u][v]>flow[u][v]) { a[v] =min(a[u],cap[u][v]-flow[u][v]);//找到一条路,并找到这条路上的最小流量 q.push(v); p[v] = u; } } } if(a[t]==0)break; for(int u = t;u!=s;u = p[u])// 更新流量 { flow[p[u]][u] += a[t]; flow[u][p[u]] -= a[t]; } f+=a[t]; } return f;}int main(){ int u,v,w; while(~scanf("%d%d",&n,&m)) { memset(cap,0,sizeof(cap)); while(n--) { scanf("%d%d%d",&u,&v,&w); cap[u][v] += w; } cout<<Max_flow()<<endl; }}
0 0
- Hdu 1532 && Hdu 3549 简单最大流初学者必做题
- hdu 1532 最简单的最大流
- hdu 3549 最大流
- hdu 3549 最大流
- HDU 3549 (最大流)
- HDU 3549 最大流
- hdu 1532 最大流
- HDU 3549 Flow Problem (简单最大流问题)
- hdu 3549 (基础最大流)
- hdu 3549(最大流)
- HDU 3549 最大流 水题
- hdu 3549 最大流 水题
- hdu 1532(最大流)
- hdu 1532 最大流模板
- hdu 1532(最大流裸题)
- hdu 2883(最大流)
- 【最大流】HDU 3572
- hdu 2883 最大流
- IIS配置
- [ACM] hdu Ignatius and the Princess I
- 用软件搭建社区
- Redis介绍及视频教程
- 将输入复制到输出,将其中的制表符,回退符,反斜杠可见的表示出来
- Hdu 1532 && Hdu 3549 简单最大流初学者必做题
- 第一次发布网站时往往还会遇到以下几个问题
- Windows系统常用软件 (BY 冷家锋)
- The Graphics Firesale
- 单词,字符,行数计数
- 1-9将输入复制到输出,并将其中连续的多个空格用一个空格代替
- 手把手教你mysql(十六)数据备份与还原
- WEB笔记
- 窗体笔记