HDU 3549 Flow Problem (最大流ISAP)
Flow Problem
Time Limit: 5000/5000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 8199 Accepted Submission(s): 3814
For each test case, the first line contains two integers N and M, denoting the number of vertexes and edges in the graph. (2 <= N <= 15, 0 <= M <= 1000)
Next M lines, each line contains three integers X, Y and C, there is an edge from X to Y and the capacity of it is C. (1 <= X, Y <= N, 1 <= C <= 1000)
3 2
1 2 1
2 3 1
3 3
1 2 1
2 3 1
1 3 1
- #include <vector>
- #include <cstdio>
- #include <cstring>
- #include <queue>
- #define FOR(i,n) for(i=1;i<=(n);i++)
- using namespace std;
- const int INF = 1e9;
- const int N = ;
- struct Edge{
- int from,to,cap,flow;
- };
- struct ISAP{
- int n,m,s,t;
- int p[N],num[N];
- vector<Edge> edges;
- vector<int> G[N];
- bool vis[N];
- int d[N],cur[N];
- void init(int _n,int _m)
- {
- n=_n; m=_m;
- int i;
- edges.clear();
- FOR(i,n)
- {
- G[i].clear();
- d[i]=INF;
- }
- }
- void AddEdge(int from,int to,int cap)
- {
- edges.push_back((Edge){from,to,cap,});
- edges.push_back((Edge){to,from,,});
- m = edges.size();
- G[from].push_back(m-);
- G[to].push_back(m-);
- }
- bool BFS()
- {
- memset(vis,,sizeof(vis));
- queue<int> Q;
- Q.push(t);
- d[t]=;
- vis[t]=;
- while(!Q.empty())
- {
- int x = Q.front(); Q.pop();
- for(unsigned i=;i<G[x].size();i++)
- {
- Edge& e = edges[G[x][i]^];
- if(!vis[e.from] && e.cap>e.flow)
- {
- vis[e.from]=;
- d[e.from] = d[x]+;
- Q.push(e.from);
- }
- }
- }
- return vis[s];
- }
- int Augment()
- {
- int x=t, a=INF;
- while(x!=s)
- {
- Edge& e = edges[p[x]];
- a = min(a,e.cap-e.flow);
- x = edges[p[x]].from;
- }
- x = t;
- while(x!=s)
- {
- edges[p[x]].flow+=a;
- edges[p[x]^].flow-=a;
- x=edges[p[x]].from;
- }
- return a;
- }
- int Maxflow(int _s,int _t)
- {
- s=_s; t=_t;
- int flow = , i;
- BFS();
- if(d[s]>=n) return ;
- memset(num,,sizeof(num));
- memset(p,,sizeof(p));
- FOR(i,n) if(d[i]<INF) num[d[i]]++;
- int x=s;
- memset(cur,,sizeof(cur));
- while(d[s]<n)
- {
- if(x==t)
- {
- flow+=Augment();
- x=s;
- }
- int ok=;
- for(unsigned i=cur[x];i<G[x].size();i++)
- {
- Edge& e=edges[G[x][i]];
- if(e.cap>e.flow && d[x]==d[e.to]+)
- {
- ok=;
- p[e.to]=G[x][i];
- cur[x]=i;
- x=e.to;
- break;
- }
- }
- if(!ok)
- {
- int m=n-;
- for(unsigned i=;i<G[x].size();i++)
- {
- Edge& e=edges[G[x][i]];
- if(e.cap>e.flow) m=min(m,d[e.to]);
- }
- if(--num[d[x]]==) break;
- num[d[x]=m+]++;
- cur[x]=;
- if(x!=s) x=edges[p[x]].from;
- }
- }
- return flow;
- }
- };
- ISAP isap;
- void run()
- {
- int n,m,u,v,c;
- scanf("%d%d",&n,&m);
- isap.init(n,m);
- while(m--)
- {
- scanf("%d%d%d",&u,&v,&c);
- isap.AddEdge(u,v,c);
- //isap.AddEdge(v,u,c);
- }
- static int cas = ;
- printf("Case %d: %d\n",cas++,isap.Maxflow(,n));
- }
- int main()
- {
- freopen("case.txt","r",stdin);
- int _;
- scanf("%d",&_);
- while(_--)
- run();
- return ;
- }
HDU 3549 Flow Problem (最大流ISAP)的更多相关文章
- HDU 3549 Flow Problem (dinic模版 && isap模版)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3549 题意: 给你一个有向图,问你1到n的最大流. dinic模版 (n*n*m) #include ...
- hdu - 3549 Flow Problem (最大流模板题)
http://acm.hdu.edu.cn/showproblem.php?pid=3549 Ford-Fulkerson算法. #include <iostream> #include ...
- hdu 3549 Flow Problem (最大流)
裸最大流,做模板用 m条边,n个点,求最大流 #include <iostream> #include <cstdio> #include <cstring> #i ...
- hdu 3549 Flow Problem 最大流 Dinic
题目链接 题意 裸的最大流. 学习参考 http://www.cnblogs.com/SYCstudio/p/7260613.html Code #include <bits/stdc++.h& ...
- HDU 3549 Flow Problem(最大流)
HDU 3549 Flow Problem(最大流) Time Limit: 5000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/ ...
- 网络流 HDU 3549 Flow Problem
网络流 HDU 3549 Flow Problem 题目:pid=3549">http://acm.hdu.edu.cn/showproblem.php?pid=3549 用增广路算法 ...
- hdu 3549 Flow Problem【最大流增广路入门模板题】
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3549 Flow Problem Time Limit: 5000/5000 MS (Java/Others ...
- hdu 3549 Flow Problem
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=3549 Flow Problem Description Network flow is a well- ...
- hdu 3549 Flow Problem Edmonds_Karp算法求解最大流
Flow Problem 题意:N个顶点M条边,(2 <= N <= 15, 0 <= M <= 1000)问从1到N的最大流量为多少? 分析:直接使用Edmonds_Karp ...
随机推荐
- 使用ZipArchive解压
本文转载至 http://www.apkbus.com/forum.php?mod=viewthread&tid=131390&extra=page%3D1 qqpk360 该用户从未 ...
- Django的标准库django.contrib包介绍(转)
Django.contrib是啥? 1.它是一个强大的功能包,是Django的标准库.2.Django的标准库存放在 django.contrib 包中.每个子包都是一个独立的附加功能包. 这些子包一 ...
- android菜鸟学习笔记9----Activity(二)
关于Activity的生命周期: 下面是Activity整个生命周期中,状态发生变化时所回调的方法,它们对应着Activity完整的生命过程. void onCreate(Bundle savedI ...
- 各种jar包下方法的使用
commons-codec-1.6.jar: DigestUtils.md5Hex(String str); httpclient-4.2.2.jar: HttpClient client=new D ...
- PYTHON调用C接口(基于Ctypes)实现stein算法最大公约数的计算
相关环境配置 mingw,选择相应的32位.64位的版本,主要用于编译动态链接库dll文件,可用vs替代,这里我选择轻量级的mingw windows64位地址:https://sourceforge ...
- HBase存储方案设计
需求描述 将数据记录持久化存储在HBase中,需要支持如下功能: 支持高吞吐量读写操作,实时采集10,000条/秒: 支持动态添加字段: 支持服务端过滤: 支持部分字段修改. 设计方案 按列存储 优点 ...
- 20145239杜文超 实验五 Java网络编程
20145239 实验五 Java网络编程 实验内容 组队,一人服务器,一人客户端. 下载加解密代码,先编译运行代码,一人加密一人解密,适当修改代码. 然后集成代码,一人加密后通过TCP发送,加密使用 ...
- <J2EE学习笔记>续上次Servlet部分提升内容 以及JSP的内容纲要
以下全部课件均来自于同济大学刘岩老师的<EnterpriseJavaProgramming> 因为授课语言问题,如果翻译有不正确之处欢迎指正 Section 1. 关于Servlet的部分 ...
- <tx:advice/> 有关的设置
将描述通过 <tx:advice/> 标签来指定不同的事务性设置.默认的 <tx:advice/> 设置如下: 事务传播设置是 REQUIRED 隔离级别是 DEFAULT 事 ...
- python学习笔记:第五天( 字典)
Python3 字典 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格 ...