当前位置: 首页 > 编程日记 > 正文

P4722 【模板】最大流

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());
}

转载于:https://www.cnblogs.com/Lance1ot/p/9813230.html

相关文章:

与我们的书合影——在2009北京国际图书展(BIBF)

2009年9月5日&#xff0c;武汉博文编辑许莹、夏青观看了于国展旧馆&#xff08;静安庄&#xff09;举行的2009北京国际图书展&#xff08;BIBF&#xff09;“专业场”。在电子工业出版社展台&#xff0c;编辑兴奋地与我们的几本畅销书&#xff08;《把时间当作朋友》、《走出软…

弄懂“进程”(下):进程的控制、同步和通信

进程控制 是进程管理的主要功能&#xff0c;负责创建和终止进程、进程执行过程中的状态转换。 由操作系统内核通过原语实现。 1.OS内核 常驻内存的、紧靠硬件的软件层次&#xff0c;运行在系统态(又称管态、内核态)&#xff0c;以免遭到用户程序的破坏。 主要包括&#xf…

(转自Timon's wang blogs)C#实现web信息自动抓取

原文转自&#xff1a;http://www.csharp.net.cn/post/C实现web信息自动抓取.html主要为了学习一下相关的网络蜘蛛&#xff0c;为自己获取信息使用背景 随着Internet的普及&#xff0c;网络信息正以极高的速度增长&#xff0c;在这么多数据中找到自己需要的信息是一件很繁琐的事…

数据结构-栈与队列

栈的定义 栈是限定仅在表尾进行插入和删除操作的线性表 我们把允许插入和删除的一端称为栈顶 (top) &#xff0c;另一端称为栈底 (bottom) &#xff0c;不含任何数据元素的栈称为空栈。 栈又称为后进先出 (Last In Filrst Out) 的线性表&#xff0c;简称LIFO结构。 理解栈的定义…

雷观(七):靠谱的程序员,不是随便一个码农就可以做到的

在学习Web开发4年之后&#xff0c;我自己可以独立做一些基本的项目了。在加入前单位秒针&#xff0c;也做了几个Web项目。 我发现一个现象&#xff0c;很多公司大部分的Web项目&#xff0c;用到的技术很少&#xff0c;主要就是SSH等框架&#xff0c;实现一些行业的业务逻辑&…

1032 Sharing

思路很简单&#xff0c;不要想多了&#xff0c;就是找第一个出现的共同字母&#xff0c;即使后面不一样了也没关系。 经验收获如下&#xff1a; 1. 5位整数算小整数&#xff0c;用静态链表&#xff0c;本质上是哈希。 2. 读入字符型的时候千万注意空格。 AC代码 #include&…

Magento开发的特点有哪些?

Magento是一套专业开源的电子商务系统&#xff0c;也是目前主流的外贸网站购物系统&#xff0c;都是居于PHP语言开发的&#xff0c;数据库使用的是Mysql&#xff0c;且浏览界面很适合欧美用户的使用习惯。Magento开发设计得非常灵活&#xff0c;具有模块化架构体系和丰富的功能…

Linux多任务编程之五:exit()和_exit()函数(转)

来源&#xff1a;CSDN 作者&#xff1a;王文松 转自&#xff1a;Linux公社 ------------------------------------------------------------------------------------------------------------------------------------------------ wait()和waitpid() 函数说明 wait()函数用…

LogMiner日志分析工具的使用

1.安装logminer&#xff1a; 要安装LogMiner工具&#xff0c;必须首先要运行下面这样两个脚本&#xff0c; $ORACLE_HOME/rdbms/admin/dbmslm.sql $ORACLE_HOME/rdbms/admin/dbmslmd.sql. 这两个脚本必须均以SYS用户身份运行。 *************使用字典文件…

1052 Linked List Sorting

1. 开始测试点4不通过&#xff0c;得分24/25&#xff0c;是忽略了所有节点都不在链表上的特殊情况。 2. 其实就是用静态链表&#xff0c;把结点根据值的大小&#xff0c;升序排列&#xff0c;所以一开始把每个结点的key赋值为超出最大值的maxn&#xff0c;是为了方便输出。 3…

C#尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

用VS2012调试时发现在调用数据集时提示“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。” 用管理员身份运行CMD&#xff0c;输入netsh winsock reset并回车 转载于:https://www.cnblogs.com/CandiceW/p/4204552.html

TFS2008 + Windows2003 + Sql2005 安装注意事项

TFS2008并不是一个很容易安装的软件&#xff0c;很多时候能否顺利安装成功跟人品有关(笑)&#xff0c;要想一次安装成功&#xff0c;强烈建议准备一个全新的干净系统。 1.系统 最好采用刚安装好的windows2003&#xff0c;注意要打上sp2&#xff0c;安装IIS(如果IIS默认站点的主…

发票拍照识别OCR

发票拍照识别系统还可与政府、企事业单位、工商等多个行业的业务流程系统无缝结合&#xff0c;辅助办公人员进行发票等单据的信息录入&#xff0c;提高资料电子化、数据格式化的效率。 那么发票拍照识别系统有哪些技术特点呢&#xff1f; 1、中安发票拍照识别系统支持安卓andro…

1097 Deduplication on a Linked List

1. 开始测试点4不通过&#xff0c;检查后发现是犯了低级错误&#xff0c;把表示绝对值有无出现的整型数组的大小设置为了4000(题目中说绝对值不会超过10的4次方)&#xff0c;所以最小也该是10001。 2. 我认为和其他链表题相比&#xff0c;本题是不需要给结点加特殊属性用来排序…

搞定MyBatis

对于从事 Java EE 的开发人员来说&#xff0c;iBatis 是一个再熟悉不过的持久层框架了&#xff0c;在 Hibernate、JPA 这样的一站式对象 / 关系映射&#xff08;O/R Mapping&#xff09;解决方案盛行之前&#xff0c;iBaits 基本是持久层框架的不二选择。即使在持久层框架层出不…

6-6.用HLSL定义点光源

6-6.用HLSL定义点光源问题直到现在&#xff0c;你已经用定向光照亮你的场景&#xff0c;它对添加阳光到3D世界很有用。常常&#xff0c;你也将需要一个单点光照&#xff0c;例如手电筒或爆炸。这种光源叫点光源。方案从你的XNA项目传递点光源的3D位置到你的XNA effect。为每个顶…

2018 JVM 生态报告:79% 的 Java 开发者使用 Java 8

百度智能云 云生态狂欢季 热门云产品1折起>>> 2018 JVM 生态调查报告已于近日发布&#xff0c;该报告由 Snyk 和 The Java Magazine&#xff08;Oracle 的双月刊&#xff09;联合推出&#xff0c;旨在了解 JDK 的实现、工具、平台和应用方面的前景。基于超过 10200 …

广度优先搜索(BFS)模板

伪代码 void BFS(int S){queue<int> q;q.push(s);while(!q.empty()){取出队首元素top;访问队首元素top;将队首元素出队;将top的下一层结点中未曾入队的结点全部入队&#xff0c;并设置为已入队;} } 说明 1. 定义队列q&#xff0c;并将起点s入队 2. 写一个while循环&a…

static关键字和内存使用

1 static静态的&#xff0c;用来修饰属性&#xff0c;方法&#xff0c;代码块&#xff0c;内部类 2 当其中一个变量对此属性进行修改&#xff0c;会导致其他对象对此属性的一个调用 vs 实例变量&#xff1a;对象各有一套副本 3 静态变量和方法随着类的加载而加载&#xff0c;可…

转载:用 Tomcat 和 Eclipse 开发 Web 应用程序

原文地址:http://www.ibm.com/developerworks/cn/opensource/os-eclipse-tomcat/所需的组件 Eclipse V3.2 Callisto 集成开发环境 (IDE) 包括了用于 Web 开发及与服务器集成的工具。所以&#xff0c;除了软件开发工具箱 (SDK) 之外&#xff0c;只需安装 Eclipse 和 Apache Tomc…

【学习——字符串】字符串之一网打尽quq

学弟lyh上午讲课&#xff0c;喜闻乐见的制胡窜 一上午讲惹KMP&#xff0c; manachar&#xff0c; trie树&#xff0c; AC自动机 orz 例题都是洛咕咕上的&#xff0c; 贴一下&#xff08;督促自己不要咕 AC自动机不会qaq&#xff08;并且没有学的意向 manachar 没写过 P4555 […

分别用BFS和DFS求给定的矩阵中“块”的个数

目录 背景介绍 BFS实现 基本思想 获取相邻位置元素技巧 BFS函数 DFS实现 基本思想 DFS函数 完整代码 背景介绍 背景 给出一个mxn的矩阵&#xff0c;矩阵中的元素为0或1。称位置(x,y)与其上下左右四个位置(x,y1),(x,y-1),(x-1,y),(x1,y)是相邻的。如果矩阵中有若干(…

[Python_7] Python Socket 编程

0. 说明 Python Socket 编程 1. TCP 协议 [TCP Server] 通过 netstat -ano 查看端口是否开启 # -*-coding:utf-8-*-"""TCP 协议的 Socket 编程&#xff0c;Server 端Server 端绑定到指定地址&#xff0c;监听特定的端口&#xff0c;接受发来的连接请求 "&q…

2014.12.01 B/S之windows8.1下安装IIS

1、打开 控制面板——程序——程序和功能——启用或关闭windows功能 2、找到Internet信息服务 3、等待安装完毕即可 4、控制面板——系统和安全——管理工具——Internet Information Services (IIS)管理器 默认路径为 C:\inetpub\wwwroot 路径更改以后记得更改权限。 转载于:h…

[分享]C# 获取Outlook帐号和密码

[分享]C# 获取Outlook帐号和密码http://www.vjsdn.com/bbs/bbsTopicDetails.aspx?pid108281214 转载于:https://www.cnblogs.com/vjsdn/archive/2009/09/26/1574341.html

BFS:走出迷宫并输出最小步数

目录 背景 描述 例子 思路 完整代码 收获总结 背景 描述 给定一个n*m大小的迷宫&#xff0c;其中*代表不可通过的墙壁&#xff0c;而“.”代表墙壁&#xff0c;S表示起点&#xff0c;T代表重点。移动过程中&#xff0c;如果当前位置是(x,y)(下标从0开始)&#xff0c;且…

人工智能和机器学习领域有哪些有趣的开源项目

人工智能和机器学习领域有哪些有趣的开源项目&#xff1f;投递人 itwriter 发布于 2014-12-02 11:21 评论(0) 有20人阅读 原文链接 [收藏] 本文简要介绍了 10 款 Quora 上网友推荐的 人工智能和机器学习领域方面的开源项目。 GraphLab GraphLab 是一种新的面向机器学习…

复杂度归纳--小结

一、复杂度分析的4个概念1.最坏情况时间复杂度&#xff1a;代码在最理想情况下执行的时间复杂度。2.最好情况时间复杂度&#xff1a;代码在最坏情况下执行的时间复杂度。3.平均时间复杂度&#xff1a;用代码在所有情况下执行的次数的加权平均值表示。4.均摊时间复杂度&#xff…

KDE社区:首个KDialogue正式开放

今天KDE社区与“People Behind KDE” 合作推出一个非常有意思的栏目&#xff0c;叫作KDialogue。 关于KDialogue&#xff0c;有点类似头脑风暴。简言之就是成员向社区发起关于KDE的话题&#xff08;或某一问题&#xff09;&#xff0c;然后KDE的开发者会被邀请参与这个话题。KE…

1091 Acute Stroke 需再做

这是BFS的典型应用场景&#xff1a;求给定矩阵中块(由相邻的点组成)的大小之和。不同的是这一次是三维。 判断是否邻接的依据是是否有公共边&#xff0c;还是可以用上增量数组的技巧 int X[6] {0,0,1,-1,0,0};//增量数组 int Y[6] {1,-1,0,0,0,0}; int Z[6] {0,0,0,0,1,-…