XXI Open Cup GP of Korea

A. Advertisement Matching

从大到小排序后显然可以贪心,合法条件是所有前缀和都有 $a\geq b$ 。

用线段树维护 a 和 b 的差,每次单点修改查询前缀和最小值。

B. Cactus Competition

迫真 Cactus。

考虑类似 AGC028F 的做法,找到对于每个左边的点,右边能到达的上界和下界。 这个上下界中所有能被任意左侧点到达的点都能被这个点到达。

“能被左侧任意点到达”就是求旋转 180 度以后右边能到达的上下界,没什么区别。

由于这个图的性质,任意两行或任意两列的墙都是子集关系。 那么如果一个左侧的点无法走到最右侧,那么一定存在一些墙构成一个 L 型(最多只会拐一次弯)。 并且一个点如果能到达右侧,那么上下界分别是第一行全没墙的和第一行全是墙的 (下界多往下一点没有关系,因为都是墙最后也不会统计进答案里。

然后就可一从下往上扫描线。时间复杂度 $O(n \log n)$ 。

C. Economic One-way Roads

考虑如何构造一个边双。

维护一个点集 $S$,初始包含 1 号点。每次从 $S$ 中选出 $u,v$ ,然后选一条 $u \to x_1 \to x_2 \to ... \to x_k \to v$ 的路径。

根据这个构造方法就有一个 $O(2^nn^3)$ 的 dp,可以通过,需要注意细节。

D. Just Meeting

先找出最大生成树,然后每条非树边的权值必须为树上对应路径的最小值。 如果有多个连通块,不同连通块之间连 1 的边。

先判断是否每条非树边都符合要求,再用并查集求答案即可。

E. Chemistry

区间图经典套路。一个图是链当且仅当:

  • 无环
  • 点度最大为 2
  • 点减边等于 1

第一个条件用 lct,第二个条件用 set 可以求出对于每个右端点左端点的下界。 第三个条件可以通过线段树上区间加减区间最小值个数实现。

F. Interval Graph

生成树其实是链,本质上是选出两组不相交的区间使得权值和最大。

显然的费用流模型,流量为 2。原始对偶,把第一次 SPFA 改为 DAG 上 dp 即可。 时间复杂度 $O(m \log m)$ 。

G. LCS 8

dp 套 dp 板子。

H. Alchemy

由于至少要合并一次,所以如果可以通过先变 0 再在最后一次中把 0 一起干掉的做法,删去一个数。 因此答案是可以二分的。

判定问题是简单的。

I. Query On A Tree 17

经典结论。带权重心一定在 dfn 序列的带权中点到根的路径上。 树剖二分即可。

J. Remote Control

签到题。

K. Sewing Graph

签到题。

L. Steel Slicing 2

单个矩形 $\iff$ 凸 $\iff$ 没有凹点。

发现一次切割会把那两个端点(如果是凹的)变凸,也就是每次切割干掉一个或两个凹点。 那么就相当于要最大化两个凹点的操作的数量。

若干次干掉两个的操作能进行当且仅当他们无交。也就是找出最大独立集。

发现所有竖着的线段可以看作点,横着的线段可以看作区间,因此可以贪心求出最大匹配。



Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.