有源汇上下界最大流/最小流

news/2025/1/11 13:00:37/文章来源:https://www.cnblogs.com/qc0817/p/18665482

最大流

#ifdef ONLINE_JUDGE 
#else 
#define Qiu_Cheng 
#endif 
#include <bits/stdc++.h> 
#define int long long 
using namespace std; 
// typedef long long ll; 
const int N=1e5+5,mod=1e9+7,inf=INT_MAX; 
// const int mod1=469762049,mod2=998244353,mod3=1004535809;
// const int G=3,Gi=332748118; 
// const int M=mod1*mod2;
inline int read()
{int x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-'){f=-1;}c=getchar();}while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c-'0');c=getchar();}return x*f;
}
inline void write(int x)
{if(x<0){putchar('-');x=-x;}if(x>9) write(x/10);putchar(x%10+'0');
}
int n,m;
int pos[N],dep[N];
int l[N],r[N],cha[N];
struct node{int to,c,lp;};
vector<node>g[N];
void add(int from,int to,int c)
{g[from].push_back((node){to,c,(int)g[to].size()});g[to].push_back((node){from,0,(int)g[from].size()-1});
}
void fc(int s)
{memset(dep,-1,sizeof(dep));dep[s]=0;queue<int>q;q.push(s);while(!q.empty()){int u=q.front();q.pop();for(auto v:g[u]){if(v.c>0&&dep[v.to]<0){dep[v.to]=dep[u]+1;q.push(v.to);}}}
}
int dfs(int u,int t,int f)
{if(u==t||!f) return f;int ans=0;for(int &i=pos[u];i<g[u].size();i++){auto &x=g[u][i];if(x.c>0&&dep[x.to]==dep[u]+1){int frz=dfs(x.to,t,min(f,x.c));if(frz>0){x.c-=frz;g[x.to][x.lp].c+=frz;f-=frz;ans+=frz;if(!f)break;}}}return ans;
}
int max_flow=0;
int dinic(int s,int t)
{int flow=0;while(1){fc(s);if(dep[t]==-1) return flow;memset(pos,0,sizeof(pos));flow+=dfs(s,t,inf);}
}
int ss,tt,S,T;
inline void solve()
{cin>>n>>m>>ss>>tt;S=0,T=n+2;for(int i=1;i<=m;i++){int x,y;cin>>x>>y>>l[i]>>r[i];add(x,y,r[i]-l[i]);cha[x]-=l[i],cha[y]+=l[i];}int cnt=0;for(int i=1;i<=n;i++){if(cha[i]>0) add(S,i,cha[i]),cnt+=cha[i];else if(cha[i]<0) add(i,T,-cha[i]);}int zky=g[ss].size();add(tt,ss,mod);if(dinic(S,T)!=cnt){cout<<"No Solution"<<endl;return;}else{max_flow+=g[ss][zky].c;g[ss][g[ss].size()-1].c=0;g[tt][g[tt].size()-1].c=0;// g[s].erase(g[s].begin()+g[s].size(),g[s].begin()+g[s].size()+1);// g[t].erase(g[t].begin()+g[t].size(),g[t].begin()+g[t].size()+1);max_flow+=dinic(ss,tt);cout<<max_flow<<endl;}
}
signed main() 
{ 
#ifdef Qiu_Cheng freopen("1.in","r",stdin); freopen("1.out","w",stdout); 
#endif // ios::sync_with_stdio(false); // cin.tie(0); cout.tie(0); // int QwQ; // cin>>QwQ; // while(QwQ--)solve(); solve(); return 0; 
}
//12 825076913 0 173167432
//  6666   66666  666666 
// 6    6  6   6      6 
// 6    6  6666      6 
// 6    6  6  6    6 
//  6666   6   6  6666666//g++ -O2 -std=c++14 -Wall "-Wl,--stack= 536870912 " cao.cpp -o cao.exe

最小流

#ifdef ONLINE_JUDGE 
#else 
#define Qiu_Cheng 
#endif 
#include <bits/stdc++.h> 
#define int long long 
using namespace std; 
// typedef long long ll; 
const int N=5e5+5,mod=1e9+7,inf=1e18; 
// const int mod1=469762049,mod2=998244353,mod3=1004535809;
// const int G=3,Gi=332748118; 
// const int M=mod1*mod2;
inline int read()
{int x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-'){f=-1;}c=getchar();}while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c-'0');c=getchar();}return x*f;
}
inline void write(int x)
{if(x<0){putchar('-');x=-x;}if(x>9) write(x/10);putchar(x%10+'0');
}
int n,m;
int pos[N],dep[N];
int l[N],r[N],cha[N];
struct node{int to,c,lp;};
vector<node>g[N];
void add(int from,int to,int c)
{g[from].push_back((node){to,c,(int)g[to].size()});g[to].push_back((node){from,0,(int)g[from].size()-1});
}
void fc(int s)
{memset(dep,-1,sizeof(dep));dep[s]=0;queue<int>q;q.push(s);while(!q.empty()){int u=q.front();q.pop();for(auto v:g[u]){if(v.c>0&&dep[v.to]<0){dep[v.to]=dep[u]+1;q.push(v.to);}}}
}
int dfs(int u,int t,int f)
{if(u==t||!f) return f;int ans=0;for(int &i=pos[u];i<g[u].size();i++){auto &x=g[u][i];if(x.c>0&&dep[x.to]==dep[u]+1){int frz=dfs(x.to,t,min(f,x.c));if(frz>0){x.c-=frz;g[x.to][x.lp].c+=frz;f-=frz;ans+=frz;if(!f)break;}}}return ans;
}
int max_flow=0;
int dinic(int s,int t)
{int flow=0;while(1){fc(s);if(dep[t]==-1) return flow;memset(pos,0,sizeof(pos));flow+=dfs(s,t,inf);}
}
int ss,tt,S,T;
inline void solve()
{cin>>n>>m>>ss>>tt;S=0,T=n+2;for(int i=1;i<=m;i++){int x,y;cin>>x>>y>>l[i]>>r[i];add(x,y,r[i]-l[i]);cha[x]-=l[i],cha[y]+=l[i];}int cnt=0;for(int i=1;i<=n;i++){if(cha[i]>0) add(S,i,cha[i]),cnt+=cha[i];else if(cha[i]<0) add(i,T,-cha[i]);}int zky=g[ss].size();add(tt,ss,inf);if(dinic(S,T)!=cnt){cout<<"No Solution"<<endl;return;}else{max_flow+=g[ss][zky].c;g[ss][g[ss].size()-1].c=0;g[tt][g[tt].size()-1].c=0;// g[s].erase(g[s].begin()+g[s].size(),g[s].begin()+g[s].size()+1);// g[t].erase(g[t].begin()+g[t].size(),g[t].begin()+g[t].size()+1);max_flow-=dinic(tt,ss);cout<<max_flow<<endl;}
}
signed main() 
{ 
#ifdef Qiu_Cheng freopen("1.in","r",stdin); freopen("1.out","w",stdout); 
#endif // ios::sync_with_stdio(false); // cin.tie(0); cout.tie(0); // int QwQ; // cin>>QwQ; // while(QwQ--)solve(); solve(); return 0; 
}
//12 825076913 0 173167432
//  6666   66666  666666 
// 6    6  6   6      6 
// 6    6  6666      6 
// 6    6  6  6    6 
//  6666   6   6  6666666//g++ -O2 -std=c++14 -Wall "-Wl,--stack= 536870912 " cao.cpp -o cao.exe

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/867715.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

摘樱桃II

摘樱桃II “作为一个合格的程序员,理应具有修bug修到凌晨4点的魄力” 戳我查看原题。 题目大意给定一个矩阵,矩阵中的每个数代表该点的樱桃个数。Robot1、Robot2分别从左上角与右上角出发,每次只能选择向正下方、左下方、右下方三个方向移动去采摘樱桃,到达矩阵的最后一行终…

colab上传压缩包文件,出现Unexpected end of archive问题?

Unexpected end of archive,上传图片数据集压缩包到colab上,使用命令进行解压,出现EOF错误,为啥呢?

BurpSuite实操之定序器功能使用

定序器的使用 BurpSuite的定序器是一款用于检测数据样本随机性质量的工具,通常用于检测访问令牌(sessiontoken)是否可预测、密码重置令牌是否可预测等场景,通过Sequencer的数据样本分析,能很好地降低这些关键数据被伪造的风险。操作:令牌保存到本地后查看: 我们看到token每…

G74【模板】拉格朗日插值法

视频链接:G74【模板】拉格朗日插值法_哔哩哔哩_bilibili P4781 【模板】拉格朗日插值 - 洛谷 | 计算机科学教育新生态// 拉格朗日插值法 O(n^2) #include <iostream> #include <cstring> #include <algorithm> using namespace std;#define LL long long …

【web安全】面向Web安全防护的蜜罐技术研究

摘 要 传统Web安全防护技术存在误报、漏报以及防御被动等问题,蜜罐技术的引入可有效改善此状况。本文针对面向Web安全防护的蜜罐技术进行研究,分析当前主流的Web蜜罐技术,提出蜜罐技术在Web安全防护中的应用模型,并进行了研究展望。 一、引言 随着Web2.0的发展,越来越多的…

文件筛选与提取、递归解压工具RecursiveDecompression

RecursiveDecompression是我用C#开发的一款实用工具,主要包括文件提取、递归解压缩两个功能。 假设我要把 D:\Temp\CalcNotepad 这个路径里面所有扩展名为vb的文件复制到另一个地方,一个一个复制很麻烦。 打开RD工具,选择源文件夹,然后选择目标路径D:\Test1(提前创建一个…

IT 运维服务规范(模板参考)

一、 总则 本部分规定了 IT 运维服务支撑系统的应用需求,包括 IT 运维服务模型与模式、 IT 运维服务管理体系、以及 IT 运维服务和管理能力评估与提升途径。 二、 参考标准 下列文件中的条款通过本部分的引用而成为本部分的条款。凡是注日期的引用文件,其随后所有的修改单(不…

Leetcode刷题的一些记录(Java)

Leetcode刷题 一、理论: 1. 数组: https://programmercarl.com/数组理论基础.html C++中二维数组在地址空间上是连续的。 像Java是没有指针的,同时也不对程序员暴露其元素的地址,寻址操作完全交给虚拟机。 所以看不到每个元素的地址情况,这里我以Java为例,也做一个实验。…

招行面试:亿级秒杀,超卖问题+少卖问题,如何解决?(图解+秒懂+史上最全)

本文原文链接 文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :《尼恩Java面试宝典》 持续更新+ 史上最全 + 面试必备 2000页+ 面试必备 + 大厂必备 +涨薪必备 免费赠送 :《尼恩技术圣经+高并发系列PDF》 ,帮你 …

OpenCL入门笔记

1、概述 1.1、OpenCL标准 OpenCL(Open Computing Language)是一个开放标准的并行编程框架,它允许开发者在异构系统上利用各种计算设备(例如CPU、GPU、FPGA等)来加速任务,目前已被广泛应用于视频处理、医学成像、机器学习等领域。 OpenCL最初由苹果公司提出,并在与AMD、IBM…

京东自动化上传图片

背景:客户目前每天需花费2小时在京东平台上传商品图片,该过程涉及手动输入SkuId并上传相应图片。由于商品数量庞大,这一操作不仅繁琐,而且容易导致错误匹配的情况。期望:通过引入自动化工具实现京东商品图片更新的自动化处理,提高操作准确性,预计每日为客户节省2小时的人…

46. bootstrap

1. bootstrap介绍中文网:https://bootcss.com/bootstrap需要导入两个文件:上方文件夹里的css文件和JavaScript文件 由于bootstrap v3依赖jQuery,因此还要导入jQuery文件bootstrap的核心是通过class直接使用类 2. 全局css样式 Bootstrap 将设置全局的 CSS 样式。HTML 的基本元…