2022-7-16听课笔记(二)
GYM 102538 G GIANT PENGUIN
题目叙述
给定 \(n\) 个点 \(m\) 条边的无向图,每个点至多在 \(k\) 个简单环里。支持两种操作,给点打上标记或是查询一个点距离最近的带有标记的点。距离就是最短路。
\(k\le 10\) 。
题解
一棵树已经要使用动态点分治了。
图考虑也这样做,但是有个问题是对于两个点 \(u\) 和 \(v\) ,他们的路径不一定非得过分治中心,除去中心以外还有若干条边可以让他们跨过分治中心,但是考虑到分治中心最多属于 \(k\) 个简单换,因此每个树边的端点也作为一个分治中心就可以了。
复杂度 \(\mathcal O(nk\log n)\)
GYM 101821 B LIS VS. LDS
题目叙述
给定长度为 \(n\) 的排列,构造一个LIS和一个LDS满足他俩无交。
题解
考虑如何判断一个LIS存在一个LDS与之不交。
有人说只要把LIS去掉,再DP一遍看LDS是不是最大的即可。但是这样是不利于解决问题的,考虑换一种方式。
统计 \(f_i\) 表示过 \(i\) 的LDS数量,容易发现LDS和LIS最多只有一个交点,于是只要 \(\sum f_i\not= U\) 即可。其中 \(U\) 表示LDS总数。
DP LIS的过程中,尽量维护两个不同的 \(f_i\) 的和。
如果最终有两个和,那么一定有解,否则看一下唯一的和是否和 \(U\) 不一样。
总结
- “无交”这样的问题可以考虑去掉之后看有多少种方案
- 对一边上升一遍下降所以相交比较少的,准确来说要进行大小分析。
UTR #3 去月球
题目叙述
长度为 \(n\) 的序列,有一种操作是删除相邻相同的数删掉。问区间 \([L,R]\) ,进行这种操作最多能够进行多少次。
题解
考虑对于一个区间怎么做,直接从前向后每次扫一遍的同时用一个单调栈,相同就弹出,不相同就继续。
考虑将栈转化为树,具体来说是退栈当成返回父亲,入栈当成向下走。
考虑区间询问,以 \(L-1\) 时刻所在节点为根,那么 \(R\) 所在节点的深度就是最后栈的大小。
有人问如果 \(R\) 走到父亲了怎么办,其实一点问题也没有。这棵树可以当成无根树的。
总结
- 栈可以通过入栈退栈的过程,把入栈当成向下走,退栈当成走父亲,整个过程用一颗树来描述。
[湖南省队集训 2021] 卿且去
题目叙述
定义 \(f(s)\) 表示,将 s 的所有子集中的数的 \(\le n\) 的倍数的选出,求最多选择多少个数满足不存在 \(i|j\) 并且 \(j|i\) 。求 \(s\) 取遍所有质数组成的集合,\(f(s)\) 的和是多少。
题解
考虑一个这样集合的最长反链是多少。最长反链等价于最小可重链覆盖。
然后,考虑最小可重链覆盖怎么做。一定是每次选择最小数 \(x\) ,选择 \(2x,4x,8x\) 这样。
这是因为,如果 \(x\) 不连 \(2x\) ,那么 \(2x\) 一定要另起一条链,因为即便是 \(2x/3\) ,也比 \(x\) 小。
容易发现 \(x\) 到 \(2x-1\) 内的所有数都需要和他们的两倍连成一条链,所以 \(2x\) 和 \(4x\) 也需要连成一条链。所以可以证明,就是若干条 \(x,2x,4x\) 每次乘二的链构成的最小链覆盖。
考虑一个数什么时候会作为链头。只有在他是奇数或者是2的倍数但不是4的倍数并且集合中只有2这一个质因数是他的因数。
然后容易列出算式,min25筛解决就可以了。
总结
- 最长反链转化最小链覆盖,不一定是什么网络流题才这样操作。
- 另外,不要被诈骗了,大胆猜测 \(x,2x,4x,\cdots\)
CF1442E Black, White and Grey Tree
题目叙述
每个点有灰色,白色和黑色三种颜色,每次可以选择一个连通块内部的一些点,把他们都删掉。不能同时选择黑色和白色的点。问是少多少次把点都删光。
题解
考虑最优方案,一定不存在一种操作是把整个树拆成若干个部分。
可以通过提前进行连通块内部的操作来避免这家事情,所以一定不会拆连通块。
因此,最优操作必然是每次剥叶子。如果没有灰色节点,那么答案就是最长的直径,其中长度定义为黑白交错的连续段数量。
有灰色节点考虑设 \(f_{x,0/1},g_{x,0/1}\) 分别表示 x 点被染成黑/白色子树内的最短的直径、x 点被染成黑/白色子树内的最长的链的最小值。转移即可。
总结
- 剥叶子问题考察直径
- 要从怎么好做的方面思考,这样会思考这个题如果没有拆分若干个部分会怎么样。

浙公网安备 33010602011771号