代表元
概念
网络上没有明确的定义,只能在少量博客中找到一些信息
大概是处理一类会算重的统计问题,在每个算重的集合中选出一个代表来统计以去重,就是代表元
例子
代表元只能说是一种思想,用于问题的转化与化简
森林连通块数量
可以用点数-边数快速计算
但有些时候不好维护,于是我们考虑好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