首页 > 其他分享 >wqs二分学习笔记

wqs二分学习笔记

时间:2024-02-23 22:26:09浏览次数:30  
标签:二分 费用 wqs 凸性 流量 笔记 DP

wqs二分

wqs是用来处理一类带有恰好选 K 个这种限制的问题

我们如果发现这个答案关于k的函数是凸函数,那么就可以二分出斜率,然后拿它去切这个函数

设这个直线为\(y=ax+b\),以上凸为例,我们要求截距最大,就是b最大,等价于\(y-ax\)最大,也就是把k限制对应的贡献-a,然后再算答案,然后就可以去除k的限制,直接求最大值,于是可以贪心或者DP,然后根据选出的k限制的贡献,判断斜率的取值

具体模型

优化一般费用流模型

考虑多次增广的费用流,每次选择最短路增广,可以发现每次选择的最短路应该只会变短,满足凸性

或者就是贪心,每次选择最优解,下一次选择肯定不会比这次优,满足凸性

DP模型

当DP中含有一位表示恰好选择k个,可以考虑只有这一维是否是凸函数,例如\(f_{i,k}\)若\(f(x)=f_{n,x}\)是凸函数,就可以wqs二分,把k这个限制优化成log,然后根据题目选择DP或贪心

例题

P5633最小度限制生成树

要求s点的度为k的MIT

证明凸性考虑最小生成树s点的度为x,然后对s点进行调整,感性理解每次修改是越来越劣,于是就是个下凸

二分一个改变量mid,给与s相连的边-mid,然后归并一下,跑kruskal,记录s的度

CF739E Gosha is hunting

有a个大师球,b个超级球,对于第i个宝可梦,用大师球有\(x_i\)的概率收回,用超级球有\(y_i\)概率收回,问期望收回多少宝可梦

发现两个求一起用的期望为\(x_i+y_i-x_iy_i\),然后就有两种想法

费用流模型:加入A,B表示a,b限制

  • s连A费用0,流量a,s连B费用0,流量b
  • A连i费用\(x_i\),流量1,B连i费用\(y_i\),流量1
  • i连t费用0,流量1,i连t费用\(-x_iy_i\),流量为1

DP:设\(f_{i,j,k}\)表示到第i个宝可梦,用来j个大师球,k个超级球的最大期望

然后发现函数\(f(x)=f_{n,a,x}\)有凸性,于是就可以把最后一维优化成log

CF802O April Fools' Problem (hard)

有n天,每天思考一道题的时间为\(x_i\),做一道题的时间为\(y_i\),每天只能思考一道和做一道,要求先思考再做题,问解决k道题的最小时间

费用流模型

  • s连i费用为\(x_i\),流量为1
  • i连i+1费用为0,流量为INF
  • i连t'费用为\(y_i\),流量为1
  • t'连t费用为0,流量为k

然后根据凸性,二分改变量,去掉k的限制,然后考虑反悔贪心

每次把思考放进堆里,做题就考虑与堆顶能匹配,若是思考就是匹配,若是做题就是替换,然后把\(-y_i\)放进堆里

Tips

根据不多的做题经验,wqs二分处理的问题要满足凸性与求的答案最值满足一致,例如上凸对应最大值,下凸对应最小值

二分时如果开到2e9,加法时一定要*1ll

标签:二分,费用,wqs,凸性,流量,笔记,DP
From: https://www.cnblogs.com/zhy114514/p/18028182

相关文章

  • 线性基学习笔记
    线性基preface需要一点线性空间知识线性相关:在向量空间V的一组向量\(A:a_1,a_2...a_m\)如果存在不全为零的数\(k_1,k_2,···,k_m\),使\(\suma_ik_i=0\)则称向量组A是线性相关的,否则线性无关线性表出:在向量空间V的一组向量\(A:a_1,a_2...a_m\)如果存在一组实数\(k_......
  • 代表元学习笔记
    代表元概念网络上没有明确的定义,只能在少量博客中找到一些信息大概是处理一类会算重的统计问题,在每个算重的集合中选出一个代表来统计以去重,就是代表元例子代表元只能说是一种思想,用于问题的转化与化简森林连通块数量可以用点数-边数快速计算但有些时候不好维护,于是我们考......
  • 线段树分治&cdq分治&整体二分
    preface感觉三种分治算法容易搞混并不容易区分它们使用的场景和题目(虽然有些题目根据性质可以使用多种分治),所以还是要归纳一下线段树分治Part1主要是处理一类带有撤回的问题,也就是一次修改只对一段区间生效(这里的区间指的是时间)即区间修改,单点查询流程大致是把区间修改挂在......
  • FWT学习笔记
    FWT/快速沃尔什变换前言FWT是处理一类问题形如(\(\oplus\)指or,and,xor二元运算符)\[c_{i}=\sum_{i=j\oplusk}a_{j}b_{k}\]考虑像FFT一样,用\(O(n\logn)\)的复杂度构造出\(fwt\),在\(O(n)\)计算出\(fwt_a\timesfwt_b\),最后在\(O(n\logn)\)将\(fwt\)转化回去正题OR考虑构......
  • 【学习笔记】 - 基础数据结构 :Link-Cut Tree
    发现树剖代码太长了,给我恶心坏了学个代码短点的能写树剖题的数据结构吧前置知识平衡树splay树链剖分简介以及优缺点介绍Link-CutTree,也就是LCT,一般用于解决动态树问题Link-CutTree可用于实现重链剖分的绝大多数问题,复杂度为\(O(n\logn)\),看起来比树剖的\(O(n\lo......
  • 第7章 程序在何种环境中运行的 笔记
    硬件环境是程序运行的基础。它包括处理器、内存、硬盘、显示器等硬件设备。这些设备为程序的运行提供了基本的物理支持。例如,处理器负责执行程序的指令,内存则负责存储程序的数据。没有这些硬件设备,程序就无法运行。操作系统环境是程序运行的平台。操作系统是一种特殊的软件,它管理......
  • 第4章 控制方法 笔记
    控制方法是一种特殊的系统方法,它强调通过调节系统的行为和性能来达到预期的目标。这种方法的核心是反馈机制,即通过收集系统的输出信息,并将其与预期目标进行比较,然后根据差异来调整系统的输入,从而实现系统的稳定和优化。在阅读过程中,我深入了解了控制方法的具体步骤和技巧。这些包......
  • 刘铁猛C#学习笔记9 表达式、语句2
    1.循环语句C#中有四种循环while循环,do-while循环,for计数循环,foreach遍历循环(1)while循环while()括号内写循环条件,一个bool类型表达式之后写一个嵌入式语句作为循环体 (2)do-while循环先执行一次,在判断循环条件,所以循环体至少会执行一次do{循环体}while(循环条件......
  • 刘铁猛C#学习笔记1 类与命名空间
    1、类概述//实验一“没有孩子牵着,气球在创建后就会飞走”/*(newForm()).Text="人类文明观察记录";//创建了一个Form类的实例,并命名其标题(newForm()).ShowDialog();//又创建了一个Form类的实例,并显示出来//最终显示的只有第二次创建的、没有标题的Form*///实验二......
  • 刘铁猛C#学习笔记2 类与类的成员
    一、属性功能:1、储存数据  2、组合起来表示对象的状态(如飞机的【速度】、【飞行高度】)二、方法由C语言的函数进化而来用来做事的【程序的核心是数据结构+算法,在此属性作为数据结构代表,方法作为算法代表】 三、事件C#的特有机制在发生某件事时通知其他类或对......