hdu3549(又是最大流模板题)
题意:
裸的最大流模板,比hdu1532多了个case输出。。。
思路:
还是用hdu1532那个模板。。。
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#include<climits>
#include<queue>
#include<stack>
#include<set>
#include<string>
#include<vector>using namespace std;
const int maxn = 510, maxm = maxn * maxn;
const int inf = 1000000000;class MaxFlow//一个挺快的模板,比一般的MaxFlow快,我也不知道为什么。。。
{
private:int next[maxm*2];int num[maxm*2];int a[maxn*2];int row_sum[maxn];int col_sum[maxn];int n , m, K;int d[maxn*2], st[maxn*2], cod[maxn][maxn];int h[maxn*2], vh[maxn*2];bool don[maxm*2],in[maxn*2];int dfs(int, int);bool visit(int, int);
public:int T;int r[maxm*2];MaxFlow() {}int Addedge(int, int, int);int Run();bool FindCircle();void Init(int m){memset(a, 0, sizeof(a));tt = 1;T = m;}int tt;~MaxFlow() {}
} mf;int MaxFlow::Addedge(int x,int y,int rr)
{next[++tt]=a[x];num[tt]=y;r[tt]=rr;a[x]=tt;next[++tt]=a[y];num[tt]=x;r[tt]=0;a[y]=tt;return tt;
}int MaxFlow::dfs(int x,int y)
{if (x==T) return y;int sig=st[x],minh=T+1;do{if (r[st[x]]){if (h[num[st[x]]]+1==h[x]){int k=dfs(num[st[x]],min(y,r[st[x]]));if (k){r[st[x]]-=k;r[st[x]^1]+=k;return k;}}minh=min(minh,h[num[st[x]]]+1);if (h[0]>T) return 0;}st[x]=next[st[x]];if (st[x]==0) st[x]=a[x];}while (sig!=st[x]);if (vh[h[x]]--==0) h[0]=T+1;vh[h[x]=minh]++;return 0;
}int MaxFlow::Run()
{for (int i=0; i<=T; i++) h[i]=vh[i]=0;for (int i=0; i<=T; i++) st[i]=a[i];vh[0]=T+1;int ret=0;while (h[0]<=T) ret+=dfs(0,K+1);return ret;
}bool MaxFlow::visit(int x,int ed)
{if (don[ed])return in[x];don[ed]=true;in[x]=true;for (int p=a[x]; p; p=next[p]){if (r[p] && (ed^p)!=1)if (visit(num[p],p)) return true;}in[x]=false;return false;
}bool MaxFlow::FindCircle()
{for (int i=0; i<=T; i++) in[i]=false;for (int i=1; i<=tt; i++) don[i]=false;for (int i=2; i<=tt; i++){if (r[i] && !don[i]){in[num[i^1]]=true;if (visit(num[i],i)) return true;in[num[i^1]]=false;}}return false;
}int main()
{int t;scanf("%d",&t);int cas=1;while(t--){int n,m;scanf("%d%d",&m,&n);int t=m;mf.Init(t);mf.Addedge(0,1,inf);for(int i=1;i<=n;i++){int s,t,c;scanf("%d%d%d",&s,&t,&c);mf.Addedge(s,t,c);}int ans=mf.Run();printf("Case %d: ",cas++);printf("%d\n",ans);}return 0;
}
hdu3549(又是最大流模板题)相关推荐
- [hdu3549]Flow Problem(最大流模板题)
解题关键:使用的挑战程序设计竞赛上的模板,第一道网络流题目,效率比较低,且用不习惯的vector来建图. 看到网上其他人说此题有重边,需要注意下,此问题只在邻接矩阵建图时会出问题,邻接表不会存在的,也 ...
- UVA - 820 Internet Bandwidth(最大流模板题)
题目: 思路: 直接套最大流的模板就OK了,注意一下输出的格式. 代码: #include <bits/stdc++.h> #define inf 0x3f3f3f3f #define M ...
- hdu 3549 Flow Problem(最大流模板题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3549 Problem Description Network flow is a well-known ...
- 最大流 最小费用最大流模板
模板从 这里 搬运,链接博客还有很多网络流题集题解参考. 最大流模板 ( 可处理重边 ) const int maxn = 1e6 + 10; const int INF = 0x3f3f3f3 ...
- 动态规划DP模板题汇总
前言 动态规划的实现逻辑是画图分前后状态,二维数组肯定能解决,但是为了降低复杂度,又会转换成一维数组,线性DP,或者存在反向DP,能节省很多思考的情况.并且保证状态的更新不会影响之前状态的计算结果. ...
- 图论-有向图的连通性模板题(hdu1296)(hdu1827)
1.强连通分量: 强连通分量可以理解为边数最少的情况下是一个环. 这里写了一个模板题用的是tarjan算法,当然还有其他算法. tarjan算法的关键其实还是对于num数组和low数组的使用 然后可以 ...
- P1339 热浪 最短路径模板题
这么naive的题面一看就是最短路模板题~~~ ok.首先是floyd算法,tts,记得把k放在最外面就行了. 1 #include <cstdio> 2 #include <cst ...
- HDU2255 奔小康赚大钱(km模板题)
Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子. 这可是一件大事,关系到人民的住房问题啊.村里共有n间房间,刚好有n家老百姓, ...
- HDU1166 敌兵布阵(树状数组模板题)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
最新文章
- iOS 本地DNS解析方法
- GC悲观策略之Parallel GC篇
- 字符串之单词原地逆转
- 恒生java开发复试_2019恒生电子面试经验(JAVA开发人员,实施工程师等)
- linux mysql插入数据乱码_解决Linux下Tomcat向MySQL插入数据中文乱码问题
- Ubuntu安装Vim编辑器
- 陶哲轩实分析 定理 13.4.6
- linux不要了装windows,从windows到linux —— 装linux吧,你不要怕!
- Wampserver下载安装教程
- 8 升满壶和两个分别是 5 升、3 升的空壶 如何得到 4 升水?
- 自动化测试-uiautomatorviewer.bat
- oracle定时器,调用存储过程,定时从n张表中取值新增到本地一张表中
- unity 控制对象移动、旋转
- 对不同角色用户设置不同的系统首页
- java华容道代码_用java编程 华容道游戏
- Python + Excel | 可视化疫苗接种随时间变化情况
- [Java]代码实现图像转换成文本
- C#学习笔记(四)-- .NET Framework与C#简介
- 【腾讯云 Finops Crane 集训营】深入了解 Crane 开源项目,集训营实验操作指南,体验过程总结
- android自定义虚线,Android 绘制虚线