首页 > 其他分享 >网络流模板-网络单纯形

网络流模板-网络单纯形

时间:2023-06-16 20:46:35浏览次数:24  
标签:lf es fa int 网络 单纯形 fe df 模板

最小费用最大流,但能过 HLPP 板子题,还能处理负环

namespace flow{ // }{{{
typedef long long ll;
constexpr int V = 5e3, E = 5e4;
constexpr int EDGE_NIL = 0;
struct Edge{
	int to;
	ll lf, cost;
	int nxt;
} es[E*2+4];
ll sumcost = 0, sumflow = 0;
int is, it, iv;
ll minc, maxf;
int head[V], cnt = (EDGE_NIL|1)+1;
ll pi[V]; 
int fe[V], mark[V], time = 2; // fe: father edge
int fa[V]; // 200ms improve
void init(int v, int s, int t){
	is = s, it = t, iv = v;
	sd fill(head, head+iv, EDGE_NIL);
	sd fill(mark, mark+iv, 0);
	sd fill(fe, fe+iv, EDGE_NIL);
	time = 2;
	cnt = (EDGE_NIL|1)+1;
	sumcost = sumflow = 0;
	minc = maxf = 0;
}
void addflow(int s, int t, ll f, ll c){
	es[cnt] = (Edge){t, f, c, head[s]}, head[s] = cnt++;
	es[cnt] = (Edge){s, 0, -c, head[t]}, head[t] = cnt++;
	sumflow += f, sumcost += sd abs(c);
}
void mktree(int x, int from_e){
	fe[x] = from_e;
	fa[x] = es[from_e^1].to;
	mark[x] = 1;
	for(int i=head[x]; i!=EDGE_NIL; i=es[i].nxt){
		if(mark[es[i].to] == 1 || es[i].lf == 0) continue;
		mktree(es[i].to, i);
	}
}
ll getpi(int x){
	if(mark[x] == time) return pi[x];
	mark[x] = time;
	pi[x] = getpi(fa[x]) - es[fe[x]].cost;
	return pi[x];
}
ll pushflow(int e){ // return delta-cost
	int rt = es[e].to, lca = es[e^1].to;
	time++;
	while(rt){
		mark[rt] = time;
		rt = fa[rt];
	}
	while(mark[lca] != time){
		mark[lca] = time;
		lca = fa[lca];
	}
	ll df = es[e].lf;
   	int todel = e, dir = -1; // dir: direction, 0->es[e].to
	for(int i=es[e^1].to; i!=lca; i=fa[i]){
		if(es[fe[i]].lf < df){
			df = es[fe[i]].lf;
			todel = fe[i];
			dir = 1;
		}
	}
	for(int i=es[e].to; i!=lca; i=fa[i]){
		if(es[fe[i]^1].lf < df){
			df = es[fe[i]^1].lf;
			todel = fe[i];
			dir = 0;
		}
	}
	ll dcst = 0; // delta cost
	if(df) {
		for(int i=es[e].to; i!=lca; i=fa[i]){
			es[fe[i]].lf += df;
			es[fe[i]^1].lf -= df;
			dcst += es[fe[i]^1].cost * df;
		}
		for(int i=es[e^1].to; i!=lca; i=fa[i]){
			es[fe[i]].lf -= df;
			es[fe[i]^1].lf += df;
			dcst += es[fe[i]].cost * df;
		}
		es[e].lf -= df;
		es[e^1].lf += df;
		dcst += es[e].cost * df;
	}
	if(todel == e) return dcst;
	int last = e^dir, lastu = es[e^dir^1].to;
	for(int i=es[e^dir].to; i!=es[todel^1].to; ){
		mark[i]=time-1;
		int i_ = fa[i];
		fa[i] = lastu;
		lastu = i;
		sd swap(fe[i], last);
		last ^= 1;
		i=i_;
	}
	return dcst;
}
void mcmf(){
	ll sfl_ = sumflow, scs_ = sumcost;
	addflow(it, is, sumflow+1, -(sumcost+1));
	sumflow = sfl_, sumcost = scs_;
	mktree(it, EDGE_NIL);
	mark[it] = ++time;
	fa[it] = 0;
	bool run = true;
	while(run){
		run = false;
		UP(i, (EDGE_NIL|1)+1, cnt){
			int s = es[i^1].to, t = es[i].to;
			if(es[i].lf && es[i].cost + getpi(t) - getpi(s) < 0){
				run = true;
				minc += pushflow(i);
			}
		}
	}
	maxf = es[cnt-1].lf;
	minc += maxf * (scs_+1);
}
} // {}}}

标签:lf,es,fa,int,网络,单纯形,fe,df,模板
From: https://www.cnblogs.com/x383494/p/17486463.html

相关文章

  • 网络编程
    网络概述:多台相互连接的计算机资源共享    3.交换数据网络的类型分类按拓扑分类:星型结构 树型结构 总线型线程 环形结构 网状架构按范围分类:局域网LAN 城域网MAN 广域网WAN 补充:个人局域网PAN 互联网Internet按传输方式分类:有线网络 无线网络 网络......
  • 【网络(七)】
    子网掩码255.255.255.0理论上可容纳多少台主机(C)A.62B.126C.253D.510最大地址个数是256个,其中第一个末段全0的是域地址(网络地址,子网地址),最后一个末段全1的是广播地址,不能分配,所以最多可用地址数是256-2=254个。但是,如果考虑实际情况,至少要有一个网关地址,所以,实际用于分配的地址(如果......
  • 智安网络|人工智能蔓延,网络安全所面临的威胁和应对之道
    随着人工智能(ArtificialIntelligence,AI)技术的快速发展和广泛应用,我们进入了一个智能时代,人工智能已经蔓延到我们生活的方方面面。然而,与其带来的方便和创新相伴随的是网络安全所面临的新威胁。【威胁一:攻击者利用人工智能技术】人工智能技术的进步为攻击者提供了新的机会和工具。......
  • Python设计模式-22-模板模式
    模板模式是一种行为型设计模式,它定义了一个算法的骨架,将一些步骤延迟到子类中实现。模板模式通常包括以下几个角色:抽象类(AbstractClass):定义了一个算法的骨架,其中包含一些抽象方法,用于延迟到子类中实现。具体类(ConcreteClass):实现了抽象类定义的接口,并实现了其中的抽象方法......
  • 仿喜茶GO小程序前端模板源码,奶茶店微信小程序源码
    本项目包含:首页点单喜茶百货百货详情历史订单我的积分商城积分商城详情页我的-微信一键登录我的-成为星球会员我的-个人资料我的-钱包我的-阿喜有礼会员码任务中心下载地址点击下载仿喜茶小程序源码运行效果图 ......
  • [网络安全] DVWA之 Insecure CAPTCHA 攻击姿势及解题详析合集
    InsecureCAPTCHACAPTCHA(CompletelyAutomatedPublicTuringtesttotellComputersandHumansApart,全自动区分计算机和人类的图灵测试)是一种常用的人机验证机制,旨在防止恶意机器人或自动化程序对网站进行滥用或攻击。reCAPTCHA验证流程如下:网站集成:网站管理员在网站上集......
  • .net core使用Html模板转PDF文件并下载的业务类封装
    前言:我这里文件下载的模板选型优先考虑html模板,上手容易,前后端通用,有了模板后就需要有转换了,html转PDF采用第三方包:SelectPdf,下面是代码核心类: 1-PDFService:usingMicrosoft.AspNetCore.Hosting;usingSelectPdf;namespaceMeShop.Domain.PDF{///<summary......
  • CKS 考试题整理 (06)-默认网络策略
    Context一个默认拒绝(default-deny)的NetworkPolicy可避免在未定义任何其他NetworkPolicy的namespace中意外公开Pod。Task为所有类型为Ingress+Egress的流量在namespacetesting中创建一个名为denypolicy的新默认拒绝NetworkPolicy。此新的NetworkPolicy必须拒绝namespacetest......
  • 音视频网络传输协议,RTSP/RTMP/SRT/NDI协议之间特点
    网络视频传输协议有哪些,RTSP/RTMP/SRT/RTP之间特点下面详细介绍:有兴趣的小伙伴可加qq群一起交流384170753RTP协议(Real-timeTransportProtocol)是一个网络传输协议,是一种实时传输协议技术,RTP协议常用于流媒体系统(配合RTSP协议)视频会议和一键通(PushtoTalk)系统(配合H.323或SIP),使它成为IP......
  • 仿奈雪の茶小程序,奶茶小程序模板源码(附下载链接)
    分享一个仿奈雪の茶小程序,奶茶小程序模板源码(兼容H5版本全网首发)完美复刻奈雪の茶小程序,可稍加修改使用。代码结构如下本项目包含:首页点餐(自取和外卖两种方式,有基本的点餐逻辑处理)取餐我的积分商城积分商城详情页积分签到会员码我的卡券收货地址我的资料我的订......