0%

JBY PtzCampDay2

Day2 A

题意

给定 \(n\times m\) 的矩形,每个格子有黑白两种颜色,每次可以操作选定一个同色连通块将其变色。现给定末状态求可能的初状态的可能数

\(n,m\leq2000\)

做法

容易发现对于一个格子,若终态时相邻有不同的,那么肯定没有操作过,其初始颜色一定与最终一样,剩下的可以任意操作,那么代表其初始颜色随意,所以答案就是 \(2^{cnt}\)

Day2 B

题意

给定 \(n\) 个点 \(m\) 条边的有向图,询问是否可以保留若干条边,使得每条边都有入边,且不存在双向边

\(n,m\leq2\times10^5\)

做法

先保留所有单向边,对于双向边的部分,可以构造一个二分图,左侧每个点代表双向边,右边代表原本的点,每个双向边想两个端点连边,计算是否能是所有都匹配,跑最大匹配即可。

Day2 D

题意

给定一个由 \(n\) 个点的,由红边组成的外向树,每个点有点权 \(c_i\),每次可以选定一条由红边组成的从 \(u\)\(v\) 的一个路径,将路径上的所有边删去,再在加上 \(u\)\(v\) 一条蓝边,可以操作任意次,求最终最小\(\sum_{f(i,j)=1}c_ic_j\)。其中\(f(i,j)\)\(i\) 能否到达 \(j\)

做法

容易有每次是到某一个叶子节点,记录当前子树往上连的是哪一个点,然后可以写出 DP,容易发现这个 DP 需要快速求解形如 \(kx + y\) 的最小值的形式,所以需要对每个子树维护一个凸包,可以直接启发式暴力维护凸包,用set 维护动态凸包即可。

Day2 E

题意

给定一个长度为 \(n\) 的字符串和一个指针,每次可以花费 \(C\) 的代价移动指针一格,或者花费 \(a_p\) 的代价改变指针指的位置的字符,对于指针的每一个初始位置,求最少代价使得字符串为回文串。

做法

先去除最边界的回文部分,然后显然指针肯定会走到最左或最右其中的一个,那么其所有可能走过的区间只有 \(O(n)\) 种,对于每一种走过的区间,改变的部分的花费不变,而走的部分可以移动指针初始位置可以简单维护,那么直接暴力移动初始指针位置维护即可

Day2 F

题意

定义序列 \(a\) 的漂亮值为 \(\sum[a_i\geq a_{i-1},a_i\geq a_{i + 1}]\)。给定长为 \(n\) 的序列 \(a_i\),将其任意重排,使得漂亮值最大,求最大的漂亮值。

\(n\leq3\times10^5,\sum n\leq 5\times10^6.1\leq a_i\leq10^9\)

做法

先考虑如下构造,将所有数升序排列, 容易发现,答案就是 \(n - Cnt + 1\)\(Cnt\) 为不同数的种数,考虑沿用该策略,从小往大放,每次将最大的放在最后面,可以将前面出现的最短的一段拿来当不同段之间的分割,每次找最少的那些,这样可以使一些段消失,最后看剩余多少段就可以了