P4722 【模板】最大流 加强版 / 预流推进


今日心血来潮,打算学习hlpp

然后学了一阵子。发现反向边建错了。容量并不是0.qwq

然后就荒废了一晚上。

算法流程的话。有时间补上

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<queue>
using std::min;
using std::queue;
using std::vector;
using std::priority_queue;
const int N=3e4,M=3e5;
const int inf=0x3f3f3f3f;
int head[N],nxt[M<<1],flow[M<<1],p[M<<1],tail=-1;
int H[N],gap[M<<1],e[N];
bool inq[N];
int n,m,s,t;
void add(int a,int b,int c)
{
p[++tail]=b;
flow[tail]=c;
nxt[tail]=head[a];
head[a]=tail;
}
struct compare
{
bool operator()(int A,int B)const{ return H[A]<H[B]; }
};
priority_queue<int,vector<int>,compare> q;
bool bfs()
{
queue<int>Q;
memset(H,0x3f,sizeof(H));
H[t]=0;Q.push(t);
while(!Q.empty())
{
int pas=Q.front();Q.pop();
for(int i=head[pas];i!=-1;i=nxt[i])
if(flow[i^1]&&H[p[i]]>H[pas]+1)
{
H[p[i]]=H[pas]+1;
Q.push(p[i]);
}
}
return H[s]!=inf;
}
void push_flow(int now)
{
for(int i=head[now];i!=-1;i=nxt[i])
if(flow[i]&&H[p[i]]+1==H[now])
{
int F=min(e[now],flow[i]);
flow[i]-=F;flow[i^1]+=F;
e[now]-=F;e[p[i]]+=F;
if(p[i]!=s&&p[i]!=t&&!inq[p[i]])
{
q.push(p[i]);
inq[p[i]]=true;
}
if(!e[now]) break;
}
return ;
}
void reset(int now)
{
H[now]=inf;
for(int i=head[now];i!=-1;i=nxt[i])
if(flow[i]&&H[p[i]]+1<H[now])
H[now]=H[p[i]]+1;
return ;
}
int hlpp()
{
if(!bfs()) return 0;
H[s]=n;
memset(gap,0,sizeof(gap));
for(int i=1;i<=n;i++)
if(H[i]<inf)
gap[H[i]]++;
for(int i=head[s];i!=-1;i=nxt[i])
if(flow[i])
{
int pas=flow[i];
flow[i]-=pas;flow[i^1]+=pas;e[s]-=pas;e[p[i]]+=pas;
if(p[i]!=s&&p[i]!=t&&!inq[p[i]])
q.push(p[i]),inq[p[i]]=true;
}
while(!q.empty())
{
int pas=q.top();
inq[pas]=false;q.pop();
push_flow(pas);
if(e[pas])
{
gap[H[pas]]--;
if(!gap[H[pas]])
for(int i=1;i<=n;i++)
if(i!=s&&i!=t&&H[i]>=H[pas]&&H[i]<n+1)
H[i]=n+1;
reset(pas);
gap[H[pas]]++;
q.push(pas);inq[pas]=true;
}
}
return e[t];
}
int main()
{
scanf("%d%d%d%d",&n,&m,&s,&t);
int a,b,c;
for(int i=1;i<=n;i++) head[i]=-1;
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
add(a,b,c);add(b,a,0);
}
printf("%d",hlpp());
}

P4722 【模板】最大流的更多相关文章

  1. HDU 1045 - Fire Net - [DFS][二分图最大匹配][匈牙利算法模板][最大流求二分图最大匹配]

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1045 Time Limit: 2000/1000 MS (Java/Others) Mem ...

  2. OI模板のpoke流[大型考试复习必备/kl]

    数论 快速乘: ll qmul(ll x,ll y,ll mod) { ll ans=0; while(y) { if(y&1) (ans+=x)%=mod; y>>=1; (x+ ...

  3. 根据xlsx模板生成excel数据文件发送邮件代码

    package mail; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExcept ...

  4. 使用POI动态更新导出的EXCEL模板中的列

    基本思路: 1.从附件服务器上取得模板的流文件 2.拿到流文件之后再使用workbook.write(outs);方法改变流文件中的数据. else if (pageContext.getParame ...

  5. [JavaWeb基础] 020.Velocity 模板引擎简单示例

    1.什么是Velocity 一种J2EE的前端模版技术,和JSP,Freemarker差不多,都是用来展示网页内容的.和JSP不同的是velocity只能显示Action中的数据,不能处理数据.不能写 ...

  6. NVelocity学习笔记一——linq2sql+NVelocity完整demo

    (一)前言      刚刚进入新公司,看公司的项目,发现开发流程几乎和以前的完全不同,再看看页面布局竟然没有发现html.神马情况????一番探究发现使用了NVelocity模板引擎开发的.于是乎花了 ...

  7. c++ list, vector, map, set 区别与用法比较

    http://blog.csdn.net/alex_xhl/article/details/37692297 List封装了链表,Vector封装了数组, list和vector得最主要的区别在于ve ...

  8. BPEL_Oracle BPEL新一代工作流介绍(概念)

    2014-11-02 Created By BaoXinjian

  9. node-RED

    node-RED提供了一个基于浏览器的编辑器,可以轻松地使用调色板中的广泛节点将流连接在一起,这些节点可以通过单击部署到其运行时.使用Node-RED,开发人员将输入/输出和处理节点连接起来,创建流程 ...

  10. 欢迎来到 Flask 的世界

    欢迎来到 Flask 的世界 欢迎阅读 Flask 的文档.本文档分成几个部分,我推荐您先读 < 安装 >,然后读< 快速上手 >.< 教程 > 比快速上手文档更详 ...

随机推荐

  1. (转)2017年最新企业面试题之shell(一,二)

    2017年最新企业面试题之shell(一) ********************************************** 企业Shell面试题1:批量生成随机字符文件名案例 * *** ...

  2. Android:Sqlitedatabase学习小结

    今天刚刚学习完Sqlite数据库的基础知识,随即把学到的东西记录下来,以便随后查阅,以下是自己对Sqlite数据库的小结:1.Sqlite简介       Sqlite是一款轻型的数据库,它包含在一个 ...

  3. 【c#文档】在 C# 中,(int) ,Int32.Parse() 和 Convert.toInt32() 三种方法的区别

    [c#文档]https://msdn.microsoft.com/zh-cn/library/system.convert.toint32.aspx 转载自:http://www.cnblogs.co ...

  4. BNU27932——Triangle——————【数学计算面积】

    Triangle Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld      Java class nam ...

  5. VS2008、 VS2010 、 VS2012、 VS2013 都能用的快捷键

    VS2008.  VS2010  . VS2012.  VS2013 都能用的快捷键 Ctrl+E,D             --格式化全部代码 Ctrl+K,F              --格式 ...

  6. PHP 文件锁和常用文件函数

    文件锁 bool flock ( int handle, int operation [, int &wouldblock] );flock() 操作的 handle 必须是一个已经打开的文件 ...

  7. [SQL SERVER系列]工作经常使用的SQL整理,实战篇(二)[原创]

    工作经常使用的SQL整理,实战篇,地址一览: 工作经常使用的SQL整理,实战篇(一) 工作经常使用的SQL整理,实战篇(二) 工作经常使用的SQL整理,实战篇(三) 接着上一篇“工作经常使用的SQL整 ...

  8. lua继承

    lua中其实是没有类的,有的只是表(table) lua查找一个表元素时的规则,其实就是如下3个步骤: 1.在表中查找,如果找到,返回该元素,找不到则往下看: 2.判断该表是否有元表,如果没有元表,返 ...

  9. 从软件工程师的角度看MacBook Air的几个设计亮点

    我多年从事软件开发和运营工作,从未跟“设计”间断过.现在在设计一个全新saas产品:超级表格(www.domypp.com).最近买了台苹果最新款的笔记本电脑MacBook Air,从该产品功能设计和 ...

  10. SharePoint 2013 - Cross-domain Library

    首先,参考链接:https://msdn.microsoft.com/en-us/library/office/fp179893.aspx?f=255&MSPPError=-214721739 ...