首页 > 其他分享 >代表元学习笔记

代表元学习笔记

时间:2024-02-23 22:24:41浏览次数:30  
标签:pre suf 代表 算重 白点 笔记 学习 dp

代表元

概念

网络上没有明确的定义,只能在少量博客中找到一些信息

大概是处理一类会算重的统计问题,在每个算重的集合中选出一个代表来统计以去重,就是代表元

例子

代表元只能说是一种思想,用于问题的转化与化简

森林连通块数量

可以用点数-边数快速计算

但有些时候不好维护,于是我们考虑好dp,好维护的做法,

钦定一个连通块中深度最小的点为代表元,统计代表元数量

P1903 [国家集训队] 数颜色 / 维护队列

对于本题,其实是带修莫队的板题

所谓去重,就是区间内的颜色若有多个,我们只统计一个,那么就钦定第一个为代表元

然后发现想统计区间代表元个数,就是统计\(pre_i<l\)的个数,转化成区间小于k的个数,即可主席树

然后发现单点修改可以维护n个set,就可做到修改pre

[AGC013D] Piling Up

首先想到枚举白点个数,设\(f_{i,j}\)表示第i次操作,剩下j个白点,然后分4种转移

发现\(n^3\)???

不对,枚举白点个数相当于把\(f_{0,j}=1\),然后就是\(nm\)

能过吗?

不能,我们发现算重了很多,因为不同的初始白点个数可能出现相同结果,于是乎算重了

我们考虑把一种结果对应dp数组的j的变化,看成一条折线

于是发现平移后能重合的折线即为同种,于是代表元就是最下面那条(即接触到j=0)

画图可证明是不重不漏的,然后dp数组就加一维表示是否接触到0即可

[CF1548E]Gregor and the Two Painters

给定两个长度分别为 \(n,m\) 的序列 \(a,b\) 和一个参数 \(x\)

生成一个 \(n\times m\) 的黑白矩阵,\((i,j)\) 为黑当且仅当 \(a_i+b_j\leq x\)

求矩阵内黑色四连通块数

考虑把一个联通块的贡献记在一个代表元上,我们令一个联通块中以\(a_i+b_j\)为第一关键字,i为第二关键字,j为第三关键字的最小点对(i,j)为代表元

考虑一个点为代表元,当且仅当它无法通过黑点走到一个\(a_i+b_j\)比它大的点,或左上角中有和它一样大点

设pre_a为i左边第一个a值不大于它的位置,suf_a为i右边第一个a值小于它的位置,pre_a和suf_b同理。

因为若存在一个使(i,j)不是代表元的点,那么一定要满足\(a_{i’}<a_i\)或\(b_{j'}<b_j\)或\(a_{i’}\le a_i\and i'<i\)或\(b_{j'}\le b_j\and j'\le j\)

即是满足(i,j)不能达到(pre_a,j)或(suf_a,j)或(i,pre_b)或(i,suf_b),也就是它们路径上存在一个白点

我们令\(mx(l,r)=MAX_{i-l}^ra_i,ma_i=min(mx(pre\_a_i,i),mx(i,suf\_a_i))\),mb同理

那么将会满足以下偏序关系:

  • \(a_i+b_j\le x\)
  • \(a_i+mb_j>x\)
  • \(ma_i+b_j>x\)

这显然是一个二维偏序问题,以\((b_j,mb_j)\)为点,进行二维数点即可

标签:pre,suf,代表,算重,白点,笔记,学习,dp
From: https://www.cnblogs.com/zhy114514/p/18028183

相关文章

  • 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考虑构......
  • Edu-English-Phonetic-IPA:国际音标发音学:英语音标的学习神器,终于找到
    https://mp.weixin.qq.com/s?__biz=MzU3NTIzOTA5OA==&mid=2247493736&idx=1&sn=8ed10241adeaa148ee3053f5db94214e&chksm=fd248ebdca5307abf32a39eed20bb83818e00692a87298d3b1c2d2cb7b2d6572df0c0301fe7d&scene=27英语音标的学习神器,终于找到音标是记录语言的符号,对音标的正确......
  • 如何学习PYTHON(python和c++哪个难学)
    1.如何学习PYTHONPython是一门简单易学的编程语言,但想要真正掌握它需要花费不少时间和精力。我的建议是先从Python基础开始学习,掌握基本语法和常见数据结构,再逐步深入学习高级特性和应用场景。 在学习Python的过程中,https://www.fuligou8.com/noking/4006.html我们可以通过阅......
  • C语言学习方法
    学习C语言是许多编程初学者的首选,https://www.fuligou8.com/noking/22013.html因为它是一种强大且广泛使用的编程语言。然而,对于那些刚开始学习C语言的人来说,掌握它可能会有一定的挑战。在本文中,我将分享一些学习C语言的方法,帮助你更轻松地掌握这门编程语言。  1.基础知识的......
  • 【学习笔记】 - 基础数据结构 :Link-Cut Tree
    发现树剖代码太长了,给我恶心坏了学个代码短点的能写树剖题的数据结构吧前置知识平衡树splay树链剖分简介以及优缺点介绍Link-CutTree,也就是LCT,一般用于解决动态树问题Link-CutTree可用于实现重链剖分的绝大多数问题,复杂度为\(O(n\logn)\),看起来比树剖的\(O(n\lo......
  • python 加密 变量 (可用于深度学习模型加密)
    需求:深度学习基于pytorch,模型需要加密。查看到网上有使用cryptography加密的方法,如https://blog.csdn.net/weixin_43508499/article/details/124390983,总体思路是调用torch的save函数将模型保存为io.BytesIO,然后使用cryptography将保存为io.BytesIO的字节进行加密,解密......
  • 第7章 程序在何种环境中运行的 笔记
    硬件环境是程序运行的基础。它包括处理器、内存、硬盘、显示器等硬件设备。这些设备为程序的运行提供了基本的物理支持。例如,处理器负责执行程序的指令,内存则负责存储程序的数据。没有这些硬件设备,程序就无法运行。操作系统环境是程序运行的平台。操作系统是一种特殊的软件,它管理......
  • 第4章 控制方法 笔记
    控制方法是一种特殊的系统方法,它强调通过调节系统的行为和性能来达到预期的目标。这种方法的核心是反馈机制,即通过收集系统的输出信息,并将其与预期目标进行比较,然后根据差异来调整系统的输入,从而实现系统的稳定和优化。在阅读过程中,我深入了解了控制方法的具体步骤和技巧。这些包......
  • markdown学习
    Markdown学习二级标题三级标题四级标题字体hellowordhellowordhellowordhelloword引用选择狂神分割线图片超链接[点击跳转哔哩哔哩][https://www.bilibili.com/video/BV12J41137hu/?p=6&spm_id_from=pageDriver&vd_source=93e3a3e5b46479942c347265d2421476]......
  • 刘铁猛C#学习笔记9 表达式、语句2
    1.循环语句C#中有四种循环while循环,do-while循环,for计数循环,foreach遍历循环(1)while循环while()括号内写循环条件,一个bool类型表达式之后写一个嵌入式语句作为循环体 (2)do-while循环先执行一次,在判断循环条件,所以循环体至少会执行一次do{循环体}while(循环条件......