代表元学习笔记
代表元
概念
网络上没有明确的定义,只能在少量博客中找到一些信息
大概是处理一类会算重的统计问题,在每个算重的集合中选出一个代表来统计以去重,就是代表元
例子
代表元只能说是一种思想,用于问题的转化与化简
森林连通块数量
可以用点数-边数快速计算
但有些时候不好维护,于是我们考虑好dp,好维护的做法,
钦定一个连通块中深度最小的点为代表元,统计代表元数量
P1903 [国家集训队] 数颜色 / 维护队列
对于本题,其实是带修莫队的板题
所谓去重,就是区间内的颜色若有多个,我们只统计一个,那么就钦定第一个为代表元
然后发现想统计区间代表元个数,就是统计的个数,转化成区间小于k的个数,即可主席树
然后发现单点修改可以维护n个set,就可做到修改pre
[AGC013D] Piling Up
首先想到枚举白点个数,设表示第i次操作,剩下j个白点,然后分4种转移
发现???
不对,枚举白点个数相当于把,然后就是
能过吗?
不能,我们发现算重了很多,因为不同的初始白点个数可能出现相同结果,于是乎算重了
我们考虑把一种结果对应dp数组的j的变化,看成一条折线
于是发现平移后能重合的折线即为同种,于是代表元就是最下面那条(即接触到j=0)
画图可证明是不重不漏的,然后dp数组就加一维表示是否接触到0即可
[CF1548E]Gregor and the Two Painters
给定两个长度分别为 的序列 和一个参数
生成一个 的黑白矩阵, 为黑当且仅当
求矩阵内黑色四连通块数
考虑把一个联通块的贡献记在一个代表元上,我们令一个联通块中以为第一关键字,i为第二关键字,j为第三关键字的最小点对(i,j)为代表元
考虑一个点为代表元,当且仅当它无法通过黑点走到一个比它大的点,或左上角中有和它一样大点
设pre_a为i左边第一个a值不大于它的位置,suf_a为i右边第一个a值小于它的位置,pre_a和suf_b同理。
因为若存在一个使(i,j)不是代表元的点,那么一定要满足或或或
即是满足(i,j)不能达到(pre_a,j)或(suf_a,j)或(i,pre_b)或(i,suf_b),也就是它们路径上存在一个白点
我们令,mb同理
那么将会满足以下偏序关系:
这显然是一个二维偏序问题,以为点,进行二维数点即可
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端