省选联考 R5
https://cplusoj.com/d/senior/contest/69a400fc1363e1a076945687
ori:
https://codeforces.com/gym/104937/problem/A
https://codeforces.com/gym/106144/problem/I
https://qoj.ac/problem/15615
T1 gym104937A Multisets
设 \(a_i\) 表示第 \(i\) 个可重集中所有数的异或和。
T2 gym106144I Remove Colors
对于 \(a_u=a_v\),所有在 \(u\) 到 \(v\) 路径上的点 \(x\),需要有 \(a_u\) 向 \(a_x\) 连边。那么每次删除强连通分量最优。
建图就是对于颜色 \(c\) 和 \(S=\{u\mid c=a_u\}\),考虑路径 \(a_u\to \operatorname{LCA}(S)\) 即可。
空间限制 \(O(n)\),我们考虑 kosaraju 算法。
dfs1: 给每个点按照后序遍历标号。
dfs2: 然后将所有边反向,标号从大到小进行搜索,每次搜到新的可达集就是一个强连通分量。
- 第一个 dfs:枚举一个没有经过的点进行 dfs,这可以使用并查集。
- 第二个 dfs:
- 若 \(u\) 的子树中有 \(a_v\ne a_u\) 且 \(LCA_v\) 在 \(u\) 祖先上,那么就可以走到 \(v\)。
- 考虑建立 dfn 线段树,然后 \(u\) 在子树中寻找 \(dfn_{LCA_v}<dfn_u\) 的点,那么就是满足条件的 \(v\)。
T3 qoj15615 Snacks Scheduling
从 \(p=[1,2,3,\cdots,n]\) 开始调整。
对于每个 \(a_i=i\) 的位置求出极大的区间 \([l_i,r_i]\)。注意到这些区间不交。
我们一定是将 \(i\) 移动到 \(l_i-1\) 或者 \(r_i+1\)。除非有 \(l_i=r_j+1\),那么可以少 1 的代价。
这样调整后一定合法,然后就可以 dp 了。
浙公网安备 33010602011771号