当前位置: 首页 > news >正文

省选前复习

网络流

1.最大流/最小割

先 bfs 对图分层,这里只走有流量的边。

然后从源点出发 dfs,每次只往层数为 \(d_u+1\) 的点流,这样每次都是最短的路径。

当前弧优化就是把 head 指针移动到这个位置。

还有如果一个点满流就要删掉。

P3376
#include<cstdio>
#include<algorithm>
#include<queue>
#define ll long long
using namespace std;
const int N=205,M=5005;
const ll inf=1e18;
int n,m,s,t,head[N],edgenum=1,dep[N],cur[N];
struct edge{int to,nxt,val;
}e[M*2];
void add_edge(int u,int v,int w)
{e[++edgenum].nxt=head[u];e[edgenum].to=v;e[edgenum].val=w;head[u]=edgenum;
}
queue<int> q;
bool bfs()
{for(int i=1;i<=n;i++) cur[i]=head[i],dep[i]=1e9;q.push(s),dep[s]=1;while(!q.empty()){int u=q.front();q.pop();for(int i=head[u];i;i=e[i].nxt){int v=e[i].to;if(e[i].val&&dep[v]>n){dep[v]=dep[u]+1;q.push(v);}}}if(dep[t]<=n) return 1;return 0;
}
ll dfs(int u,ll flow)
{
//	printf("%d %lld\n",u,flow);if(u==t||flow==0) return flow;ll res=flow;for(int i=cur[u];i;i=e[i].nxt){cur[u]=i;int v=e[i].to,w=e[i].val;if(w&&dep[v]==dep[u]+1){ll k=dfs(v,min(1ll*w,res));res-=k,e[i].val-=k,e[i^1].val+=k;}}if(res==flow) dep[u]=0;return flow-res;
}
int main()
{scanf("%d%d%d%d",&n,&m,&s,&t);for(int i=1;i<=m;i++){int u,v,w;scanf("%d%d%d",&u,&v,&w);add_edge(u,v,w),add_edge(v,u,0);}ll ans=0;while(bfs()){ans+=dfs(s,inf);}printf("%lld",ans);return 0;
}

2.费用流

先 spfa 找费用最短路,然后把这条路流满,重复这个过程。

P3381
#include<cstdio>
#include<queue>
#include<algorithm>
#define ll long long
using namespace std;
const int M=5e4+5,N=5005;
const ll inf=1e17;
int n,m,s,t,head[N],edgenum=1;
struct edge{int nxt,to,flow,val;
}e[M*2];
void add_edge(int u,int v,int f,int w)
{e[++edgenum].nxt=head[u];e[edgenum].to=v;e[edgenum].val=w;e[edgenum].flow=f;head[u]=edgenum;
}
int flow[N],pre[N];
ll dis[N],maxf,minc;
bool inq[N];
queue<int> q;
bool spfa()
{for(int i=1;i<=n;i++) flow[i]=0,dis[i]=inf;q.push(s),inq[s]=1,dis[s]=0,flow[s]=1e9;while(!q.empty()){int u=q.front();inq[u]=0;q.pop();for(int i=head[u];i;i=e[i].nxt){int v=e[i].to,f=e[i].flow,w=e[i].val;if(f&&dis[v]>dis[u]+w){dis[v]=dis[u]+w,flow[v]=min(flow[u],f);pre[v]=i;if(!inq[v]) inq[v]=1,q.push(v);}}}if(dis[t]<inf) return 1;return 0;
}
void MCMF()
{maxf+=flow[t],minc+=flow[t]*dis[t];int x=t;while(x!=s){e[pre[x]^1].flow+=flow[t],e[pre[x]].flow-=flow[t];x=e[pre[x]^1].to;}
}
int main()
{scanf("%d%d%d%d",&n,&m,&s,&t);for(int i=1;i<=m;i++){int u,v,w,c;scanf("%d%d%d%d",&u,&v,&w,&c);add_edge(u,v,w,c),add_edge(v,u,0,-c);}while(spfa()){
//		printf("a");MCMF();}printf("%lld %lld",maxf,minc);return 0;
}
http://www.jsqmd.com/news/416528/

相关文章:

  • 应用安全 --- 旁门左道 之 文件交叉验证法
  • 中小企业人事外包优选,覆盖全流程+人事合规外包需求 - 包罗万闻
  • 2026年质量好的三节隐藏轨骑马抽/三维隐藏轨骑马抽值得信赖厂家推荐(精选) - 品牌宣传支持者
  • 在上海婚介迷途后清醒:一段零成本的算法与真心的对决
  • Rollup input深度解析
  • 2026汽化器市场优选:这些厂家不容错过,制氮机/真空管/液氮/液氧/二氧化碳/液氩/储罐/汽化器,汽化器企业哪个好 - 品牌推荐师
  • 2028年人工智能吞噬人类,看到这份推演报告吓出一身冷汗
  • OpenClaw(Clawdbot)+Skills集成小白教程:2026年京东云一键部署基础教学
  • 2026年质量好的OEM眼影盒/四色眼影盒热门品牌厂家推荐 - 品牌宣传支持者
  • 2026年热门的屋面变形缝/楼面变形缝厂家推荐与选购指南 - 品牌宣传支持者
  • 好写作AI | 不止是提纲:AI如何帮你检验论文逻辑的“木桶效应”
  • JAVA WEB学习15
  • 基于STM32单片机和RFID的智能仓库管理系统(有完整资料)
  • 广东恒温恒湿试验箱品牌众多,哪个品牌性价比高 - myqiye
  • 基于物联网的教室人数检测系统(有完整资料)
  • 2026年热门的高温声波测井换能器/高压声波测井换能器厂家选购完整指南 - 品牌宣传支持者
  • 2026年换热器厂家推荐排行榜:板式/宽通道/管式换热器,换热器板片与热交换器板/垫/橡胶垫、胶条源头实力品牌深度解析 - 品牌企业推荐师(官方)
  • 2026年知名的唐山烧鸡/玉田正宗烧鸡公司口碑推荐哪家靠谱 - 品牌宣传支持者
  • 基于单片机的可燃气体报警系统设计(有完整资料)
  • windows下main启动函数
  • 工厂质量检测具体案例解析:三维扫描如何把“抽检”升级为“全检级效率” - 工业三维扫描仪评测
  • 基于物联网的智能病房设计(有完整资料)
  • 在AI技术唾手可得的时代,挖掘新需求成了重中之重——某知名异构推理框架需求探索
  • 告别多步采样:何凯明漂移模型,一步生成图像刷新SOTA
  • 盒马鲜生礼品卡回收我推荐京顺回收!回收价高提现速度快 - 京顺回收
  • 拖延症福音 9个降AI率网站深度测评:继续教育必备工具推荐
  • 60个Agent同时运行,分工明确、互相学习是怎样的?
  • 双目立体视觉中的彩色SAD算法
  • 学术创作福利!AI专著写作工具大集合,节省时间提升效率
  • AI写专著攻略:精选工具助力,从构思到完稿一气呵成