19年举办的THUWC2020(aka THUWC2019-2)题意回忆+部分口胡题解
由于博主很菜,不保证回忆准确无误。
D1T1
题意:
你有一个长度为 的序列,有 次操作,每次操作会给你一个长度为 的序列 和一个位置 ,假设你当前手里序列是 ,如果 就会将 序列整个替换成 。
操作序列在初始时告诉你且不会修改。
现在有 次询问,每次给出初始序列 ,问在执行了操作序列中的操作之后的最终序列长什么样子。
时限
口胡:
签到题,由于替换是整个操作,我们处理出原序列被替换成了某个序列的答案,然后对于询问,找到第一次替换发生的位置即可。
预处理直接倒着来就行了。注意我们需要维护前缀最大值,要开一个单调栈。
D1T2
题意:
给你一个有向图 ,每条边有经过次数的限制。
有次询问(但是我看ouuan说是?),每次给一个初始位置 和步数限制 ,按照如下规则进行游走:
- 如果当前点没有可以走的出边或者已经达到步数限制,结束。
- 否则选择所有出边中编号最小的,走过去。
游走是具有后效性的,即每条边被经过的次数在全局进行统计,而不会在每个询问后进行重置
时限
口胡:
这道题算是救了我一命,幸好这道题调出来了,不然我可能就真的凉了。
把每个点的当前选择的出边拎出来,显然是一个基环树森林。
直接LCT维护基环树森林,对于询问大力分类讨论就行了。
一个小时能A的我请你嚯冰阔落
D1T3
题意:
现在网上找得到的题意都是已经转化过的,我来口胡一个隐约记得的未转化的题意。
给一棵大小为 树,定义 为两点树上路径需要经过的边数。
有 次询问,每次给一个区间 ,问标号在 的点集 有多少个子集满足是 的,( 是一个开始就给好了的变量)
定义两个点 是 的,当且仅当以下条件成立:
- 存在一个点的序列 ,长度为 ,使得
- 对于 ,
- 对于 ,
定义一个点集 是 的,当且仅当以下条件成立:
- 对于任意 , 是 的。
- 对于任意, 不是 的。
时限
题解:
容易发现就是要把距离不超过 的点连边,然后求 的导出子图连通块个数,转化题意用不了多少时间。
我现在也不会,放一个神仙发在UOJ群里的题解
D2T1
题意:
你有一个初始值 ,和 次变换操作,第次操作形如 。
请你调整操作的顺序,最大化最终 的值。
,时限。
口胡:
听说很多错误做法能过pp。。。
一个比较naive的想法是维护最大最小值,大于的最小值和小于0的最大值。
最大最小值就可以维护了,但是后面两个东西目前仍然有点尴尬。
注意到实际上变成了 或者 ,也就是 的形式。
的情况直接判掉不管,否则 的值相对于 总是不减的,后面一个 最多导致绝对值变化。
维护 到 的可达性即可。
复杂度视实现从 到 ,不过由于根本卡不满所以能过。
D2T2
题意:
给一张 图 ,令 为 的 树(优先 编号小的节点)。 次询问 ,每次给两个点 ,保证 是 的祖先,请你回答在删掉 树上路径的所有边之后,有多少点无法从 号点到达。
时限
口胡
一个比较显然的想法是对于每个点 ,求出最高的一个祖先 ,使得 能够不经过 树上路径上的边到达。
先考虑在知道 之后怎么处理询问,对于点 ,在 处我们就可以将 标记为可达。那么询问 的时候我们需要的就是 到根的合法区间的并在 中有多少元素。
可持久化线段树即可。
回到开头,怎么求。
下来想了半天总算想明白了,类似半支配点的求法,按照DFS序倒着处理,对于,我们枚举除了父亲以外所有能够到的点,很容易注意到我们要求的就是这些点在反图中不经过的任何祖先边,能够到达的最高的的祖先,直接带权并查集维护一下就行了。(和求半支配点唯一的区别就是不能考虑父亲)
MD这才是D2签到题,我真TM是个铁憨憨
D2T3
给一棵树 ,不修改,有 次询问,每次给一条有向路径和一个数 ,询问把路径上的点的序列拿出来,求有多少个序列在经历了 轮冒泡排序后得到该序列。
时限
不会
翻到一篇题解,还没看:here。