zkw费用流+当前弧优化】的更多相关文章

zkw费用流+当前弧优化 var o,v:..] of boolean; f,s,d,dis:..] of longint; next,p,c,w:..] of longint; i,j,k,l,y,t,ss,tt,n,ans,imp,flow:longint; procedure link(i,j,k,l:longint); begin inc(t); next[t]:=d[i]; d[i]:=t; p[t]:=j; c[t]:=k; w[t]:=l; next[-t]:=d[j]; d[j]…
图论-zkw费用流 模板 这是一个求最小费用最大流的算法,因为发明者是神仙zkw,所以叫zkw费用流(就是zkw线段树那个zkw).有些时候比EK快,有些时候慢一些,没有比普通费用流算法更难,所以学zkw费用流之前,不需要先掌握普通费用流. 前置知识:\(\texttt{网络最大流}\). 在学了网络最大流后,如果在没条边上加个限制,就是 \(cost\),表示这条边上每走过 \(1\) 流量就要付费 \(cost\),求在最大流的情况下,要交的最少费用. 如上费用流图,最大流为 \(1\),在…
所谓ZKW费用流,其实就是Dinic. 若干年前有一个人发明了最小增广路算法,每次用BFS找一条增广路,时间O(nm^2) 然后被DinicD飞了:我们为什么不可以在长度不变时多路增广呢?时间O(n^2m) #include<cstdio> #include<cctype> #include<queue> #include<cstring> #include<algorithm> #define rep(s,t) for(int i=s;i<…
期末结束,竞赛生活继续开始,先怒刷完寒假作业再说 至于期末考试,数学跪惨,各种哦智障错,还有我初中常用的建系大法居然被自己抛至脑后,看来学的还是不扎实,以后数学要老老实实学.物理被永哥黑了两分,然后很庆幸自己计算题没错,化学又犯了看A选C的毛病,但就算这不算也考的很不理想,归结下来是因为做题速度太慢,需要在寒假练习速度与正确性(化学二卷正确率还是可以的,哈哈哈),英语因为没时间写作文,导致作文得了七分(哭死),而且智障课内完型还错了,原因是图卡时候速度太快,完型最后两题两个D写连起来了,导致填成…
题目描述 一个餐厅在相继的N天里,第i天需要Ri块餐巾(i=l,2,-,N).餐厅可以从三种途径获得餐巾. (1)购买新的餐巾,每块需p分: (2)把用过的餐巾送到快洗部,洗一块需m天,费用需f分(f<p).如m=l时,第一天送到快洗部的餐巾第二天就可以使用了,送慢洗的情况也如此. (3)把餐巾送到慢洗部,洗一块需n天(n>m),费用需s分(s<f). 在每天结束时,餐厅必须决定多少块用过的餐巾送到快洗部,多少块送慢洗部.在每天开始时,餐厅必须决定是否购买新餐巾及多少,使洗好的和新购的餐…
Description 长者对小明施加了膜法,使得小明每天起床就像马丁的早晨一样. 今天小明早上醒来发现自己成了一位仓管员.仓库可以被描述为一个n × m的网格,在每个网格上有几个箱子(可能没有).为了防止倾倒,每个网格上,箱子不应该堆放超过h个.为了满足要求,小明需要搬一些箱子,每一次,他可以把箱子从一个网格到相邻的网格(如果两个网格共享一条边). 请计算为了满足要求,小明至少需要搬多少次. Input 第一行一个整数T,表示有T组测试数据. 接下来每组数据,第一行有3个整数n, m, h(1…
https://darkbzoj.cf/problem/2673 有一个芯片,芯片上有N*N(1≤N≤40)个插槽,可以在里面装零件. 有些插槽不能装零件,有些插槽必须装零件,剩下的插槽随意. 要求装好之后满足如下两条要求: 1.第 i 行和第 i 列的零件数目必须一样多(1≤i≤N). 2.第 i 行的零件数目不能超过总的零件数目的 A/B(1≤i≤N,0≤A≤B≤1000,B≠0). 求最多可以另外放多少个零件(就是除掉必须放的).如果无解输出impossible. zkw费用流就是像跑最大…
分析 记\(D_i\)为从\(S\)出发到\(i\)的最短路 最短路算法保证, 算法结束时 对于任意存在弧\((i,j)\)满足\(D_i + c_{ij}\ge D_j\) ① 且对于每个 \(j\) 至少存在一个 \(i\) 使得等号成立 ② 算法结束后, 恰在最短路上的边满足 \(D_j = D_i + c_{ij}\) 在最小费用流的计算中,我们每次沿 \(D_j = D_i + c_{ij}\)的路径增广 增广会让流量减小,会让部分的弧变得没有流量(即暂时不存在了) 是不会破坏①,但可…
输入输出样例 输入 #1复制 2 3 220 280 170 120 210 77 39 105 150 186 122 输出 #1复制 48500 69140zuixiaofeiyo 说明/提示 1 \leq n, m \leq 1001≤n,m≤100 思路 这题不应该算是个紫题吧.. 没啥坑,也很容易想到最大费用流就是把所有边转换为负边权后的最小费用流 建图也很好想 CODE #include <bits/stdc++.h> #define dbg(x) cout << #x…
最大流模板: 普通最大流 无向图限制:将无向图的边拆成2条方向相反的边 无源汇点有最小流限制的最大流:理解为水管流量形成循环,每根水管有流量限制,并且流入量等于流出量 有源汇点的最小流限制的最大流 顶点有流量限制:拆成2个点,连接一条容量为点容量限制的边. 容量为负数:不能直接利用最大流求边权为负数的最小割. 模板使用Dinic算法,使用了当前弧优化,效率还是不错的. 但是ispa算法的效率更高,采用了当前弧优化的ispa算法那就更更高的效率了(=^ ^=) #include<iostream>…
最大流模板: 普通最大流 无向图限制:将无向图的边拆成2条方向相反的有向边 顶点有流量限制:拆成2个点,连接一条容量为点容量限制的边 无源汇点有最小流限制的最大流:理解为水管流量形成循环 有源汇点的最小流限制的最大流 有源汇点的最小流限制的最小流 容量为负数:不能直接利用最大流求边权为负数的最小割.不知道怎么具体处理... 模板使用Dinic分层算法,使用了当前弧优化,效率还是不错的,使用的是vector存图,如果使用邻接表存图效率应该会更高吧. 但是ispa算法的效率更高,采用了当前弧优化的i…
这个题的数据,太卡了,TLE了两晚上,各种调试优化,各种蛋疼. 2756: [SCOI2012]奇怪的游戏 Time Limit: 40 Sec Memory Limit: 128 MB Submit: 2311 Solved: 598 [Submit][Status][Discuss] Description Blinker最近喜欢上一个奇怪的游戏. 这个游戏在一个 N*M 的棋盘上玩,每个格子有一个数.每次 Blinker 会选择两个相邻 的格子,并使这两个数都加上 1. 现在 Blinke…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4744 题意:三维空间n个点,每个点有一个wi值.每对点的距离定义为floor(欧拉距离),每对点之间建一条边的费用为两点间的距离,每对点之间可以建多条边.现要求对每一个点 i ,都在wi 个简单环上(每个点每条边都只经过一次),每条边只能属于一个简单环,简单环的费用为每条边的费用之和,问最小的建环费用. 思路:每个点拆成a.b两个点,从附加源点S到a连一条边,容量为wi,费用为0:从b到附加汇点T连…
[题目链接] http://poj.org/problem?id=3680 [题目大意] 有N个带权重的区间,现在要从中选取一些区间, 要求任意点都不被超过K个区间所覆盖,请最大化总的区间权重. [题解] 我们将权重取负后进行建图,对于每个区间从首到末连边, 如果该路被增广则说明这个区间被选定,我们只要给定K的流量 最后求出最大流下的最小费用即可 [代码] #include <cstdio> #include <algorithm> #include <cstring>…
#include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #include<stack> #include<queue> #include<cstring> #define PAU putchar(' ') #define ENT putchar('\n') #define MSE(a,b) memset(a,b,sizeof(a)) #…
理论:http://www.cnblogs.com/acha/p/6735037.html #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #define N 5001 #define M 50001 const int inf=1e9; int n,m,src,decc; ; ],nxt[M<<],];…
稀疏图慢死了...但是稠密图效果还是很好的 struct MCMF{ struct tedge{int x,y,cap,w,next;}adj[maxm];int ms,fch[maxn]; int vis[maxn],d[maxn],ans,cost,S,T,n; void init(int n){ ;ans=cost=; memset(fch,-,sizeof(fch)); return; } inline void addedge(int u,int v,int cap,int w){ a…
/************************************************************** Problem: 3876 User: wangck1998 Language: C++ Result: Accepted Time:176 ms Memory:1456 kb ****************************************************************/ #include <bits/stdc++.h> using…
题目链接 LOJ 洛谷 容易想到最小费用最大流分配度数. 因为水管形态固定,每个点还是要拆成4个点,分别当前格子表示向上右下左方向. 然后能比较容易地得到每种状态向其它状态转移的费用(比如原向上的可以流到向下). 注意比如向左向上的L,左连右,上连下,没有上连右(日常zz). 可以看这的图. 解决旋转的问题后,还要处理流量从哪里产生.结束. 因为是网格图,容易想到黑白染色.题目中"没有漏水水管"即格子的断头两两匹配,而匹配只发生在黑白格之间.so源点向所有白格子连边,所有黑格子向汇点连…
题面 传送门 思路 引入:网络流? 看到这道题,第一想法是用一个dp来完成决策 但是,显然这道题的数据并不允许我们进行dp,尤其是有10000种志愿者的情况下 那么我们就要想别的办法来解决: 贪心?这道题做的决策除了价值以外还有覆盖面问题,而且更致命的是每一天的人数需求还不一样 那么题目限制如此多元化的题目,我们就一定要想到用那个传说中的万能算法--网络流 想到网络流以后,一个直观的想法就是源点连人,人连可以被雇佣的日子,日子连汇点,然后跑最小费用最大流 但是这样有一个问题:本题中的雇佣不是可以…
Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会 买一个男生和一个女生一起跳舞,互为舞伴.Cathy收集了这些同学之间的关系,比如两个人之前认识没计算得出  a[i][j] ,表示第i个男生和第j个女生一起跳舞时他们的喜悦程度.Cathy还需要考虑两个人一起跳舞是否方便, 比如身高体重差别会不会太大,计算得出 b[i][j],表示第i个男生和第j个女生一起跳舞时的不协调程度.当然, 还需要考虑很多其他问题.Cath…
传送门 模型 网络优化问题,用最小费用最大流解决. 实现 把每天分为二分图两个集合中的顶点Xi,Yi,建立附加源S汇T. 1.从S向每个Xi连一条容量为ri,费用为0的有向边. 2.从每个Yi向T连一条容量为ri,费用为0的有向边. 3.从S向每个Yi连一条容量为无穷大,费用为p的有向边. 4.从每个Xi向Xi+1(i+1<=N)连一条容量为无穷大,费用为0的有向边. 5.从每个Xi向Yi+m(i+m<=N)连一条容量为无穷大,费用为f的有向边. 6.从每个Xi向Yi+n(i+n<=N)…
前置姿势 \(k\)维空间内两点曼哈顿距离中绝对值的处理 戳这里:[CF1093G]Multidimensional Queries 多路增广的费用流 据说这个东西叫做ZKW费用流? 流程其实很简单,就是把EK中的单路回溯改成利用DFS多路增广,类似Dinic那样,可以看作是EK的一个优化.需要注意的是要标记从源点到当前点的路径,以免陷入零环无法自拔. 代码 bool spfa(){ memset(dis,0x3f,sizeof dis); rin(i,1,n)cur[i]=head[i]; w…
题目大意: 平面上有n个点,两两不同.现在给出二叉树的定义,要求树边一定是从上指向下,即从y坐标大的点指向小的点,并且每个结点至多有两个儿子.现在让你求给出的这些点是否能构成一棵二叉树,如果能,使二叉树的树边长度(欧几里德长度)总和最小,输出这个总和.如果不能,输出-1.答案与标准答案相差1e-6内都认为是正确的. 算法讨论: 起初是这样想的,肯定是MCMF,费用是距离,然后流量一开始我是这样搞的:从父亲向儿子连流量为2的边.但是你会发现这样有一个问题,就是如果某个结点如果真的有两个儿子的话,那…
Description 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难 题:为即将启动的奥运新项目招募一批短期志愿者.经过估算,这个项目需要N 天才能完成,其中第i 天至少需要 Ai 个人. 布布通过了解得知,一共有M 类志愿者可以招募.其中第i 类可以从第Si 天工作到第Ti 天,招募费用 是每人Ci 元.新官上任三把火,为了出色地完成自己的工作,布布希望用尽量少的费用招募足够的志愿者,但这 并不是他的特长!于是布布找到了你,希望你帮他设计一种…
BZOJ 洛谷 裸01分数规划.二分之后就是裸最大费用最大流了. 写的朴素SPFA费用流,洛谷跑的非常快啊,为什么有人还T成那样.. 当然用二分也很慢,用什么什么迭代会很快. [Update] 19.2.15 下午写的zkw费用流在BZOJ上T了= = 然而在洛谷上和以前写的跑的差不多快 当然还可以写整数二分或者KM... 输出的时候最好加个eps,不然可以被卡比如BZOJ discuss里的数据. 第一次写的代码: //3624kb 4016ms #include <queue> #incl…
http://www.lydsy.com/JudgeOnline/problem.php?id=1061 好神的一题! 学会了一种建模方式: 当方程组内的任意变量都在其中两个方程出现且一正一负,可以建立网络模型(按方程的数目为节点),原理就是流量守恒,其中方程的常数可以就是限制方程成立的容量(即最大流可以满足方程),按符号向源和汇连边即可. orz 具体的详细数学建模看blog:https://www.byvoid.com/zhs/blog/noi-2008-employee/ 然后建图就是:…
容易看出这是显然的费用流模型. 把每天需要的餐巾数作为限制.需要将天数拆点,x’表示每天需要的餐巾,x’’表示每天用完的餐巾.所以加边 (s,x',INF,0),(x'',t,INF,0). 餐巾可以新买.所以需要加边(s,x'',INF,f). 没用完餐巾可以留到下一天,所以加边(x',x+1',INF,0). 送往快洗店,加边(x',x+a+1'',INF,fa). 送往慢洗店,加边(x',x+b+1'',INF,fb). 跑一遍费用流即可.由于该图是一种特殊的结构,类二分图结构.用ZKW费…
利用SPFA+EK算法解决费用流问题 例题不够裸,但是还是很有说服力的,这里以Codevs1227的方格取数2为例子来介绍费用流问题 这个题难点在建图上,我感觉以后还要把网络流建模想明白才能下手去做这种题,老实说挺难的 先直接给出建图的代码: scanf("%d",&x); //把每个节点拆成两个,分别为ai和bi //ai向bi连边,费用为权值,容量为1 //再连边,费用为0,容量为k,保证联通 addedge((i-)*n+j,(i-)*n+j+n*n,,x); added…
传送门 一道题让我又要学可行流又要学zkw费用流…… 考虑一下,原题可以转化为一个有向图,每次走一条路径,把每一条边都至少覆盖一次,求最小代价 因为一条边每走过一次,就要付出一次代价 那不就是费用流了么 我们定义每走一次都会对一条边增加1的流量,1然后费用为时间 那么把下界设为1,上界设为inf,跑一个最小费用可行流就可以了 ps:不会可行流的可以去看看这个博客,我觉得写得很不错->这里 //minamoto #include<iostream> #include<cstdio&g…