Loading

【笔记】USACO22OPEN

T1

直接 DP,\(f_{i,j}\) 表示区间 \([i,j]\) 的答案,直接做是 \(\mathcal{O}(N^3)\),也可以二分或者直接双指针。

满分不会待补。

T2

首先如果存在一个点,它不能到达任何一个环,那么一定先手必胜。这一步可以一遍拓扑排序。

否则结束的状态一定是两个石子,一个石子堵住另一个石子(不能到达一个环的点要删掉),所以图中必然存在边 \(x\to y\),其中 \(x\) 的出度为 \(1\)

那么我们可以把 \(x,y\) 缩成一个点,然后合并重边,一直重复这个操作直到所有点的出度 \(>2\)

那么对于一个询问,直接判断输入的两个点是否是合并后的同一个点。

直接合并的复杂度可能有点假,我们记 \(F(x) = \{y\ |\ x\to y\in E\}\),那么合并点 \(x, y\),将 \(x\) 合并到 \(y\) 上和把 \(y\) 合并到 \(x\) 上的复杂度分别是 \(|F(x)|,|F(y)|\),所以启发式合并即可。

T3

\(f_{i}\) 表示以 \(i\) 结尾的最大的 \(k\),枚举 \(j>i\) 转移,条件是 \([a_j > a_i] = [s_{f_i + 1} = U]\),直接转移是 \(\mathcal{O}(N^2)\),显然可以线段树优化至 \(\mathcal{O}(N\log N)\)

posted @ 2022-03-30 19:21  7KByte  阅读(289)  评论(0编辑  收藏  举报