AGC012B Splatter Painting
这题是被指导的,设 (f(u)) 表示最大的 (d) 使所有距离 (u) (d) 以内的节点都被染色了。
然后每次 bfs
,如果到一个点它被覆盖的新 (d>f(u)) 就继续遍历它的相邻节点。
这样的时间复杂度是 (Theta(ND))。
AGC012C Tautonym Puzzle
容易走进陷阱:用每段连续的数构成 (2^k-1) 然后拼成答案,这样可能是不行的?
正解:右边放 (1 o 100),然后答案是左边的上升子序列个数。
如果左边只有 (1),答案是 (1);否则每次把一个更大的数加在左边的前面,上升子序列数量 (+1);否则上升子序列 ( imes 2)。
然后对答案二进制拆分用个列表(题解中好像不用列表)维护一下即可。
AGC012D Colorful Balls
首先可以如果可以交换的间连一条边,那么每个联通块可以换成任意排列。
所以目的就是划出每个联通块,然后排列组合一下就好了。
先利用相同颜色和 (x):找到每个颜色中最小的,然后别的看看能不能和它合上即可。
如果某个颜色的一个球没有和最小的合上,用 (y):
-
如果它的颜色的最小的就是全局最小的,看看它能不能和次小的颜色合上。
-
否则,看看它能不能和全局最小的合上。
然后再看看每个颜色的最小的可以不可以和全局最小的合上即可。
AGC012E Camel and Oases
看成一个分成图,每层图的每个联通块是一段,每层图选一个联通块,使得每个点都被走过。
很明显这个分成图的层数是 (Theta(log v)) 级别的。
尝试 dp
,因为题目多次规定第一层选的联通块,所以想到预处理前后缀。
假如是前缀,有两个关键信息:用了的层和选了的前缀长度。
可以以前者为 dp
状态,经过预处理后容易 dp
出后者。
然后可以发现第一层的联通块数如果超过 (Theta(log v)) 个是无解的。
所以可以枚举第一层的联通块和左边前缀用了的层数,容易得到答案。
时间复杂度 (Theta((n+v)log v))。
AGC012F Prefix Median
设 (a_i=i),考虑能当第 (i) 个中位数的有那些数:([i,2n-2-i])。
满足这个条件的同时,还需要满足 (forall j<i,j otin (a_i,a_i+1)) 中位数序列就必然是合法的。
所以如果从后往前选数,每次选数 (a_i) 前面就不能选 ((a_i,a_i+1)) 的数了。
所以设 (f(i,l,r)) 表示从后往前选到第 (i) 个数,比当前数小的有 (l) 个可选,比当前数大的有 (r) 个可选的方案数,dp
即可。