#include<bits/stdc++.h>
using namespace std;
using namespace std;
typedef long long ll;
const int MAXN = 10005;
#define inf 0x3f3f3f3f3f3f3f3f struct ISAP{
int n;//实际建图总点数(最好比图中总点数大一点)
struct Edge{
int v,next;
ll cap,flow;
}edge[MAXN*100];
int cur[MAXN],pre[MAXN],gap[MAXN],path[MAXN],dep[MAXN];
int cnt=0;//实际存储总边数
void init(int n){
this -> n =n;
cnt=0;
memset(pre,-1,sizeof(pre));
}
void AddEdge(int u,int v,ll w,ll rw=0)//加边 单向图三个参数 双向图四个
{
edge[cnt] = (Edge){v,pre[u],w,0};
pre[u]=cnt++;
edge[cnt] = (Edge){u,pre[v],rw,0};
pre[v]=cnt++;
}
bool bfs(int s,int t){//其实这个bfs可以融合到下面的迭代里,但是好像是时间要长
memset(dep,-1,sizeof(dep));
memset(gap,0,sizeof(gap));
gap[0]=1;
dep[t]=0;
queue<int>q;
while(!q.empty())
q.pop();
q.push(t);//从汇点开始反向建层次图
while(!q.empty()){
int u=q.front();
q.pop();
for(int i=pre[u];i!=-1;i=edge[i].next){
int v=edge[i].v;
if(dep[v]==-1&&edge[i^1].cap>edge[i^1].flow)//注意是从汇点反向bfs,但应该判断正向弧的余量
{
dep[v]=dep[u]+1;
gap[dep[v]]++;
q.push(v);
//if(v==s)//感觉这两句优化加了一般没错,但是有的题可能会错,所以还是注释出来,到时候视情况而定
//break;
}
}
}
return dep[s]!=-1;
}
ll isap(int s,int t){
bfs(s,t);
memcpy(cur,pre,sizeof(pre));
int u=s;
path[u]=-1;
ll ans=0;
while(dep[s]<n){//迭代寻找增广路
if(u==t){
ll f=inf;
for(int i=path[u];i!=-1;i=path[edge[i^1].v])//修改找到的增广路
f=min(f,edge[i].cap-edge[i].flow);
for(int i=path[u];i!=-1;i=path[edge[i^1].v]){
edge[i].flow+=f;
edge[i^1].flow-=f;
}
ans+=f;
u=s;
continue;
}
bool flag=false;
int v;
for(int i=cur[u];i!=-1;i=edge[i].next){
v=edge[i].v;
if(dep[v]+1==dep[u]&&edge[i].cap-edge[i].flow){
cur[u]=path[v]=i;//当前弧优化
flag=true;
break;
}
}
if(flag){
u=v;
continue;
}
int x=n;
if(!(--gap[dep[u]]))return ans;//gap优化
for(int i=pre[u];i!=-1;i=edge[i].next){
if(edge[i].cap-edge[i].flow&&dep[edge[i].v]<x){
x=dep[edge[i].v];
cur[u]=i;//常数优化
}
}
dep[u]=x+1;
gap[dep[u]]++;
if(u!=s)//当前点没有增广路则后退一个点
u=edge[path[u]^1].v;
}
return ans;
}
}F;

ISAP模板的更多相关文章

  1. HDU 4280:Island Transport(ISAP模板题)

    http://acm.hdu.edu.cn/showproblem.php?pid=4280 题意:在最西边的点走到最东边的点最大容量. 思路:ISAP模板题,Dinic过不了. #include & ...

  2. 【CodeVS 1993】草地排水 isap模板题

    开始网络流的学习,更新一下isap的模板 #include<cstdio> #include<cstring> #include<algorithm> #defin ...

  3. 【网络流#8】POJ 3469 Dual Core CPU 最小割【ISAP模板】 - 《挑战程序设计竞赛》例题

    [题意]有n个程序,分别在两个内核中运行,程序i在内核A上运行代价为ai,在内核B上运行的代价为bi,现在有程序间数据交换,如果两个程序在同一核上运行,则不产生额外代价,在不同核上运行则产生Cij的额 ...

  4. 最大流算法 ISAP 模板 和 Dinic模板

    ISAP // UVa11248 Frequency Hopping:使用ISAP算法,加优化 // Rujia Liu struct Edge { int from, to, cap, flow; ...

  5. HDU 3572 Task Schedule(ISAP模板&amp;&amp;最大流问题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=3572 题意:m台机器.须要做n个任务. 第i个任务.你须要使用机器Pi天,且这个任务要在[Si  , ...

  6. Dinic 与 SAP(ISAP?) 模板

    发一个最大流模板 DinicDinicDinic //vis为int类型 //sz为总点数 namespace Dinic { inline bool bfs() { int head = 0, ta ...

  7. ISAP 模板

    #include <iostream> #include <cstring> #include <cstdio> #include <queue> us ...

  8. 最大流isap模板

    isap+bfs初始化+栈优化,点的编号从0开始: ; ; const int INF = 0x3f3f3f3f; struct Edge { int to, next, cap, flow; }ed ...

  9. LOJ 101 最大流(ISAP 模板)

    开long long的最大流 #include<bits/stdc++.h> using namespace std; ;//点数的最大值 ;//边数的最大值 ; struct Edge ...

随机推荐

  1. NPOI例子

    例子链接:http://www.cnblogs.com/atao/tag/NPOI/default.html?page=1

  2. 【NGUI】Unity3D UIGrid 排序、动态加载与销毁

    本帖最后由 Lucifer_H 于 2014-10-31 09:39 编辑 做 UIGrid 的动态加载是做游戏的装备列表时用到的,装备信息都是从后台发过来的,具体加载的代码如下: [C#] 纯文本查 ...

  3. javascript 禁止页面选取-兼容IE、Chrome和firefox浏览器

    在做到一个页面需要禁止网页内容被选取的时候,碰到浏览器兼容的问题,解决方法如下 1.单独使用适用于IE.Chrome浏览器,主要是在head的<script>标签里面加上如下代码 docu ...

  4. Mybatis 3.1中 Mapper XML 文件 的学习详解(转载)

    MyBatis 真正的力量是在映射语句中.这里是奇迹发生的地方.对于所有的力量,SQL 映射的 XML 文件是相当的简单.当然如果你将它们和对等功能的 JDBC 代码来比较,你会发现映射文件节省了大约 ...

  5. 160425、linux安装SVN服务器

    1:查看linux是否已经安装svn服务 [root@nb ~]# rpm -qa subversion subversion-1.6.11-15.el6_7.x86_64 2:安装svn #yum ...

  6. c# 日常记录,(获取系统时间、return),一些文件隐藏无法引用,c#多个窗体之间传值

    1.获取系统时间 DateTime.Now.ToString(); DateTime dt =DateTime.Now; dt.AddDays(1); //增加一天 dt.AddDays(-1);// ...

  7. c# 项目文件,C#viual studio使用方法

    一.项目文件 1)Properties节点下主要存放的是当前程序集相关的信息,如版本号.标题等.双击”Properties“,打开如下项目属性窗口,可以设置项目相关的一些参数. 2)引用 节点主要列出 ...

  8. kibana5.6 源码分析以--环境搭建&技术准备

    Kibana是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的.你可以用kibana搜索.查看.交互存放在Elasticsearch索引里的数据,使用各种不同的图表.表格 ...

  9. Struts2+Spring3+MyBatis3整合以及Spring注解开发

     分类: Web(2)  版权声明:本文为博主原创文章,未经博主允许不得转载. 最近在做一个SpringMVC+spring+MyBatis的项目,突然想起以前自己要搭建一个Struts2+Sprin ...

  10. linux 将同后缀名的文件统一移至另一个文件夹

    w