代表元学习笔记

代表元

概念

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

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

例子

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

森林连通块数量

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

但有些时候不好维护,于是我们考虑好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)\)为点,进行二维数点即可

posted @ 2024-02-23 22:20  zhy_learn  阅读(114)  评论(0)    收藏  举报