zkw专题

zkw(张昆玮)线段树(单点更新)

博客搬家:最爱午后红茶 zkw线段树特点: 非递归,代码简短,结合位运算速度快 结构: 我们可以用一个一维数组c[]来储存数据信息 接下来详细介绍单点更新和区间和求法: 假设需要处理的数组为a[n],则上图叶子数至少为n + 2(其中第一片叶子跟最后一片叶子是不能储存数据的,后面解释),比如说如果n = 2,那只需要把c[]数组开到8;但3 <= n <= 6都要把c[]数

#网络流,费用流,SLF优化,SPFA,zkw费用流#jzoj 1586 codevs 1362 洛谷 2604 网络扩容

题目 有两个问题,首先求1到 n n n的最大流(不解释了),然后求1到n使最大流扩展 k k k的费用,每扩展一个最大流,扩展一次边的费用 分析 当然如何做第二个问题,可以重新建一个汇点流量是最大流 + k +k +k,费用为0,并且原来的边再建一次从 u u u到 v v v,费用为该边的费用,流量无限跑一次最大流,then就讲完了 代码 #include <cstd

#zkw费用流,最小费用最大流#洛谷 4012 codevs 1917 ssl 2620 深海机器人问题

题目大意 在一个平面直角坐标系中,机器人只能往右和上采集标本,每个格点都有不同的价值,现在若干个机器人从某点出发目的地为某点,问采集到的最大价值 分析 其实这道题类比于K取方格数,容易建出这样一张图 然后跑一遍最大费用最大流就可以了,但是我把费用取反,跑的是最小费用最大流 代码 #include <cstdio>#include <deque>#include <cstri

#zkw费用流,最大费用最大流#codevs 1227 洛谷 2045 poj 3422 k取方格数 方格取数加强版

题目 跑 k k k遍方格取数,问能取到的最大价值 分析 按照算法竞赛进阶指南,建边应该是拆点后入点连接出点用两条边,一条容量为1,费用为 a i , j a_{i,j} ai,j​,另一条容量为 k − 1 k-1 k−1,费用为0,向右向下的有向边容量为 k k k,费用为0,从 ( 1 , 1 ) (1,1) (1,1)入点开始跑到 ( n , n ) (n,n) (n,n)的出点

数据结构--zkw线段树

好几天没写了,写点儿奇怪的东西,一个不好理解的黑科技。 zkw线段树,顾名思义,就是zkw大神发明的线段树。 由于我实在是太弱了,无法讲述zkw大神的高深的ppt,就留一个下载网址:统计的力量(zkw线段树) 我这里要说的,就是zkw线段树的具体用法,首先,原版zkw只能做到单点修改&区间查询,可是这并无卵用,因为树状数组完全可以替代它。 但是,zkw经过一些数学变化,就可以区间修改&

zkw线段树模板及理解

zkw线段树模板及理解 线段树作为很重要的一个知识点一直却没有学会,今天突然接触到了一种新的线段树写法,相比原来的较简单,叫zkw线段树。 这个线段树并不需要递归的来写,并且在单点查询上有很好的效果。 zkw需要建立一个满二叉树来实现。 首先是一个区间求和的建树的操作: void build(int x){for(M=1;M<=n+1;M<<1);fo

最小费用最大流 zkw算法

最小费用最大流的算法有很多种,经典的就是EK+SPFA。但是时间效率确实令人不敢恭维~ 最近小小的学习了一下传说中的费用流的神算法——zkw算法。(P.s. 以其发明者zkw神牛的名字命名)   该算法可以有效地通过修改距离标号的方法避免反复进行最短路运算的部分省去,基本算法类似KM算法的顶标修改。基本思想就是:采用距离标号法,若能增广则无限增广,反之更新距离标号,直到无法更新为止。 本人

POJ 3422 最小费用最大流 zkw或者普通版本

建图的话 每个点拆成两个点u, u',连一条容量为1费用为金币数的边,再连一条容量为k,费用为0的边 然后每个点和他右边或者下边的点连边 i'->j这样连 然后源点连1点,右下角那个点去连汇点,容量都为k,费用为0 普通写法 #include <iostream>#include <algorithm>#include <cstring>#include <string>#i

最小费用最大流之 zkw费用流与普通费用流

http://www.artofproblemsolving.com/blog/54262 这个是原作者的博文地址 这是今天刚学的,不过理解上还是很浅薄。最近发现算法不能融会贯通还是因为自己太死板了。 奉上一个基础版本的模板, POJ 2195 的代码。 本模板是不能直接用于任何有负权的图,更不能用于有负圈的情况 #include <iostream>#include <algor

【算法竞赛学习笔记】用不着数据结构之zkw线段树

title : zkw线段树 date : 2021-8-29 tags : ACM,数据结构 author : Linno 如果没有接触过线段树的同学,可以看一下这篇博客: https://blog.csdn.net/SC_Linno/article/details/120971169 简介 zkw线段树是一种改良的非递归式的线段树,发明人张昆玮。 zkw线段树有如下优点:

非递归式(zkw)线段树详解(一)

线段树,是在信息学各类比赛中经常出现的数据结构之一 普通的线段树大家应该都会,下面来介绍一种不需要递归的线段树 zkw线段树 出自:《统计的力量》-张昆玮 zkw线段树不同于普通线段树的地方在于:它采用堆结构,构造一颗满二叉树(也可以说是完全二叉树),而二叉树的最后一层则是各个节点。 注意:zkw线段树必须是点树,即完全闭区间 普通线段树中的修改需要去查询节点,并分为三类: 完全

zkw线段树:高效的单点/区间修改+查询(原理+扩展技巧)

前言 出处:清华大学 张昆玮(zkw) - ppt 《统计的力量》 重口味线段树不仅比普通线段树速度快、空间小,而且码量小得多,循环结构思路也很清晰,很适合用来优化Dijkstra和套在树剖以及树套树上。 其中最重要的一点是,zkw的常数很小,仅次于树状数组。一个打得很烂的zkw,常数也不会劣于卡常卡得最好的普通线段树。(拿LOJ132为例,我的zkw和树状数组的码量差不多,跑得比所有普通线

NYOJ116 士兵杀敌(二)(线段树区单点更新,区间求和,zkw线段树)

题目: 士兵杀敌(二) 时间限制: 1000 ms  |  内存限制: 65535 KB 难度: 5 描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的。 小工是南将军手下的军师,南将军经常想知道第m号到第n号士兵的总杀敌数,请你帮助小工来回答南将军吧。 南将军的某次询问之后士兵i可能又杀敌q人,之后南将军再询问的时候,需要考虑到新增的杀