代表元学习笔记

代表元

概念

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

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

例子

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

森林连通块数量

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

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

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

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

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

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

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

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

[AGC013D] Piling Up

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

发现n3???

不对,枚举白点个数相当于把f0,j=1,然后就是nm

能过吗?

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

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

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

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

[CF1548E]Gregor and the Two Painters

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

生成一个 n×m 的黑白矩阵,(i,j) 为黑当且仅当 ai+bjx

求矩阵内黑色四连通块数

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

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

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

因为若存在一个使(i,j)不是代表元的点,那么一定要满足ai<aibj<bjaiaii<ibjbjjj

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

我们令mx(l,r)=MAXilrai,mai=min(mx(pre_ai,i),mx(i,suf_ai)),mb同理

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

  • ai+bjx
  • ai+mbj>x
  • mai+bj>x

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

posted @   zhy_learn  阅读(63)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示