雅礼集训2019 Day2

雅礼集训2019 Day2

two

你有两棵有根树,每棵各有 n 个顶点。让我们用整数 1 到 n 给每棵树的顶点编号。两棵树的根都是顶点 1。第一棵树的边都都是蓝色,第二棵树的边都是红色。 简明起见,我们称第一棵树是蓝色的,以及第二棵树是红色的。

当满足下面的两个条件下,我们认为边(x, y) 有害于边(p,q):

  1. 边(x,y)的颜色不同于边(p,q)。
  2. 考虑与边(p, q) 颜色相同的树,编号为 x, y 的两个顶点中有且只有一个同时在 顶点 p 的子树与顶点 q 的子树里。

现在告诉你,在阶段 1,有恰好一条蓝色的边被删除了, 而在阶段 i,若我们删除了边(u1,v1), (u2,v2),. . . , (uk,vk)。 那么在阶段 i+1 我们要删除的所有满足以下条件的边(x,y):

  1. 边(x,y)未被删除。
  2. 存在一个 i(i ≤ k)使得边(x,y)有害于(ui , vi )。

当某个阶段没有删除任何边时,则整个过程结束,你需要回答,每个阶段哪些边将被删除。 注意,有害边的定义只依赖于开始删边之前的初始就拥有的两棵有根树。

发现对于一条边哪些边能选这条边作为下一层一定是在一条路径上(除开LCA),直接线段树优化连边+最短路即可。

然后边权只有01,跑0-1bfs即可。总复杂度\(n\log ^2n\)(边的数量)。标算好像是一个log的,不过4s随便跑吧,树剖常数还小。

bracket

给定一棵有 n 个节点的无根树,每个节点上是一个字符,要么是(,要么是)。

定义 S(x, y) 为从 x 开始沿着最短路走到 y,将沿途经过的点上的字符依次连起来得到的字符串。

合法括号序定义如下:

  1. ()是合法的。
  2. 若 A,合法,则(A)也合法。
  3. 若 A,B 分别合法,则 AB 也合法。

函数 f(x, y) 等于对 S(x, y) 进行划分,使得每一个部分都是合法括号序,能得 到的最大的段数,比如(())()()的最大段数为 3,(()())(())的最大段数为 2。 特别的,如果 S(x,y)本身并不是合法括号序,则 f(x,y)=0。

m 次询问,每次输入一个 k,查询有多少点对的 f 值为 k。

雅礼泄题CSP,建议禁赛一年

其实差别还是蛮大的。

由于不是到根的路径,考虑点分治之后拼接两条链,那么一定是\(()()(())...(((...\) + \(...)))...(())()()\)这样的。因为中间的一定会组成一段,所以可以忽略,只考虑后面的段数。那么对于左边有\(y_1\)个单独的左括号,后面有\(x_1\)段,右边有\(y_2\)个单独的右括号,后面有\(x_2\)段,这两个要拼起来一定满足\(y1=y2\),并且最终段数为\(x_1+x_2+1\),按y归类+FFT即可。注意\(x\)不会超过这层的总点数。

写到一半结果没保存,就没写了。

sum

请你取出集合{1, 2, …, n}的一个子集,使得其中的元素两两互质,并最大化子集 中的元素之和,你只需要输出这个子集中的元素之和即可。 如 ans(10)=30,此时的子集为{1, 5, 7, 8, 9}。

结论题。(题解:并不清楚怎么证明…)

首先可以发现两个结论:

  1. 最优集合里每个数最多只有两个不同的质因子
  2. 若一个数含有两个不同质因子,则一定满足一个< √n,一个> √n

依据上述结论,我们可以建一个二分图,跑最大费用流即可。 然而直接跑可能会 T,我们先默认每个数都只有一种质因子来初始化答案,

那么对于一个< √n 的素数 i令 S 向 i 连一条费用为 0 流量为 1 的边,

对于一个> √n 的素数 i令 i 向 T 连一条费用为 0 流量为 1 的边,

对于一对(i,j)则只有当f(i, j) − f(i) − f(j) > 0才令 i 向 j 连一条费用为f(i, j) − f(i) − f(j)流量为 1 的边(f 表示用这些质因子能凑出的最大的≤ n的数) 最后跑出来的费用加上初始的答案就是最终答案。

知道结论后就不难了

后记

感觉最近好颓啊...还有十多天就要省选了,这样下去不行的,不如我们......

posted @ 2020-06-14 19:22  lcyfrog  阅读(315)  评论(0编辑  收藏  举报