P4722 【模板】最大流

news/2024/7/1 4:49:40

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


http://lihuaxi.xjx100.cn/news/236041.html

相关文章

机器学习03-神经网络

目录 一、非线性估值Non-Linear Hypothesis 二、神经网络建模 Neural Network 三、复习逻辑回归问题矩阵式 3.1 没有进行正则化 3.2 进行正则化 四、神经网络的代价函数 4.1 符号约定Notation 4.2 代价函数 五、反向传播算法 Backpropagation Alg 5.1 任务 5.2 一个…

数据结构-栈与队列

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

法院判决:优步无罪,无人车安全员可能面临过失杀人控诉

据路透社报道&#xff0c;负责优步无人车在亚利桑那州致人死亡事件调查的律师事务所发布公开信宣布&#xff0c;优步在事故中“不承担刑事责任”&#xff0c;但是当时在车上的安全员Rafaela Vasquez要接受进一步调查&#xff0c;可能面临车辆过失杀人罪指控。2018年3月&#xf…

【转载】pycharm远程调试配置

pycharm远程调试配置https://www.cnblogs.com/liangjiongyao/p/8794324.html

当移动数据分析需求遇到Quick BI

我叫洞幺&#xff0c;是一名大型婚恋网站“我在这等你”的资深老员工&#xff0c;虽然在公司五六年&#xff0c;还在一线搬砖。“我在这等你”成立15年&#xff0c;目前积累注册用户高达2亿多&#xff0c;在我们网站成功牵手的用户达2千多万。目前我们的公司在CEO的英名带领下&…

Magento开发的特点有哪些?

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

CV01-语义分割笔记和两个模型VGG ResNet的笔记

目录 一、语义分割 二、VGG模型 2.1 VGG特征提取部分 2.2 VGG图像分类部分 三、ResNet模型 3.1 为什么是ResNet 3.2 11卷积调整channel维度大小 3.3 ResNet里的BottleNeck 3.4 Global Average Pooling 全局平均池化 3.5 Batch Normalization 学习语义分割理论&#x…

发票拍照识别OCR

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