AtCoder Beginner Contest 287
ABCD 比较简单就不写了。
E - Karuta
给 \(n\) 个字符串 \(S_i\ (\sum |S_i|\le 10^5)\) ,问每个串和其他所有串的 LCP 的最大值。
先把所有串建 Trie ,再查一遍,走到计数器只有 \(1\) 的时候就停。复杂度 \(O(n+\sum |S_i|)\) 。
1 |
|
F - Components
给一棵树 \((n\le 5000)\) ,问有多少个点集的导出子图恰好有 \(x=0,1,\dots,n\) 个联通分量(定义含极大性)。
树形背包计数,加一维 \(0/1\) 表示当前点选/不选,如果父子两个都上选会合并一个联通块。复杂度 \(O(n^2)\) 。
1 |
|
G - Balance Update Query
有 \(n\ (n\le 2\times 10^5)\) 组数,开始第 \(i\) 组有 \(b_i\ (b_i\le 10^4)\) 个 \(a_i\ (a_i\le 10^9)\) ,接下来 \(q\) 次操作:
1 x y
把 \(a_x\) 修改为 \(y\ (y\le 10^9)\)2 x y
把 \(b_x\) 修改为 \(y\ (y\le 10^4)\)3 x
查询所有数字的前 \(x\ (x\le 10^9)\) 大和。
离线,离散化全部做过 \(a_i\) 的值,以此为下标建立线段树。
节点维护价值区间内数字个数和 \(\sum\) 个数 \(\times\) 价值 ,查询在线段树上二分即可。复杂度 \(O(n\log n)\) 。
1 |
|
Ex - Directed Graph and Query
给定一个 \(n\ (n\le 2000)\) 个点的有向图,\(q\ (q\le 10^4)\) 次询问从 \(s_i\) 到 \(t_i\) 经过的节点编号最大值的最小值。
Floyd 最外层枚举到 \(k\) 的含义就是只经过编号为 \(1\dots k\) 的节点的最短路。
因此 bitset
维护传递闭包,每次更新完一个 \(k\)
就扫描全部询问,看看有没有已满足的即可。
复杂度 \(O(\frac{n^3}{64} + nq)\) 。
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!