2023.12 杂题
I found it hard, it's hard to find. Oh well whatever nevermind.
- 1. CF1904E Tree Queries
- 2. CF1904F Beautiful Tree
- 3. ABC332G Not Too Many Balls
- 4. SCOI2016 萌萌哒
- 5. ICPC 2023 Shenyang M Outro: True Love Waits
- 6. B Turning Permutation
- 7. H Line Graph Sequence
- 8. D. Dark LaTeX vs. Light LaTeX
- 9. I. Three Rectangles
- 10. A. Intro: Dawn of a New Era
- 11. F. Ursa Minor
- 12. CodeChef COLORTREE Subtree Coloring
- 13. JOI 2019 Final Unique Cities
- 14. PTZ21W Day 9 K. Knowledge Is...
- 15. JOISC 2018 Day 1 Construction of Highway
- 16. JOISC 2018 Day 1 Tents
- 17. JOISC 2018 Day 2 Asceticism
- 18. JOISC 2018 Day 2 Worst Reporter 3
- 19. JOISC 2018 Day 3 Airline Route Map
- 20. JOISC 2018 Day 3 Bitaro's Party
- 21. JOISC 2018 Day 4 Library
- 22. JOISC 2018 Day 4 Candies
- 23. JOISC 2018 Day 4 Wild Boar
- 24. JOISC 2018 Day 3 Security Gate
- 25. 牛客多校 2019 R9 A. The Power of Fibonacci
- 26. 牛客多校 2019 R9 I. KM and M
- 27. 牛客多校 2019 R9 F. Birthday Reminders
- 28. USACO 2023.12 A Graph Problem P
- 29. USACO 2023.12 Cowntact Tracing P
1. CF1904E Tree Queries
Tag:T-欧拉序;S-线段树。
注意到
使用欧拉序描述整棵树,那么这个时候
处理答案只需要离线询问后每次换根即可,这里的维护是容易的,Code,
2. CF1904F Beautiful Tree
Tag:G-优化建图;G-拓扑排序;H-倍增。
怎么感觉是简单题。
考虑
所以要做到
其实写起来有点像 ST 表优化建图?不管了反正就板子优化建图,Code。
3. ABC332G Not Too Many Balls
Tag:G-网络流;D-背包。
hot tea!显然有网络流建模:
- 建立二分图,左侧
个点,右侧 个点,以及源点 汇点 。 - 令
为第 个左部点,连边 ,令 为第 个右部点,连边 。 - 连边
。
直接求最大流肯定过不去,考虑有什么好的优化,直接在最大流角度有点 hard,考虑转最小割。
令左侧点集为 ,右侧点集为 ,左侧和 连一起的点集为 ,右侧和 连一起的点集为 。
那么最小割即:
直接做仍然很难做,考虑枚举
这个时候前后就拆成了两部分,第一部分可以背包解决,第二部分可以求出每个
4. SCOI2016 萌萌哒
Tag:S-ST 表;S-并查集。
没见过这种套路啊!注意到条件可以类似 ST 表拆成两个大小为
然后最后再从大往小处理限制,就可以做到
5. ICPC 2023 Shenyang M Outro: True Love Waits
Tag:H-Ad-hoc。
不错的思维题。
首先
那么可以观察出来
其余情况下,将
6. B Turning Permutation
Tag:D-计数 DP。
插入类计数 DP。考虑试填。
每次尝试固定
令
接下来要考虑固定住的数,首先在填到这个数的时候,肯定会钦定这个数填在哪里,其次其他的数不能填在这些数之前,没了。
总时间复杂度
7. H Line Graph Sequence
Tag:H-Ad-hoc。
其实感觉场上有可能能做出来,严谨的做出比较困难?先胡个做法:直接暴力模拟几次,如果中途爆了
手摸了五个点的菊花图,发现确实如此,这个增长率是非常大的。
注意到四个点的菊花图会收敛到三元环不动,一条链会消没,一个环会不动,如果判定收敛就把每个连通块对应的连通块情况判掉即可,Code。
8. D. Dark LaTeX vs. Light LaTeX
Tag:D。
首先两边相等的情况可以使用 LCP 统计,答案即为
接下来考虑上述情况,枚举
常规的 SAM,SA 之类的似乎都做不了(反正我不会),最后却是最基本的 DP,套路见多了脑子不转了属于是。
9. I. Three Rectangles
Tag:H-分类讨论。
枚举左上角塞哪个矩形,接下来看哪个角没有填好,没填好就塞一个矩形,如果铺满了剩下的就有若干种方案填好。
这肯定会算重,但是减掉算重的其实应该不难,需要几次容斥?
看眼题解,好像做法是一样的,但是估计有点难写,鸽了。
10. A. Intro: Dawn of a New Era
Tag:G-网络流。
如果说将能产生贡献的点连边,则这会连出一个 DAG,问题即求 DAG 最长反链覆盖,但是这个图是建不出来的,然后就不懂了。
考虑对颜色建点,那么先让所有的颜色都对最大颜色连边,那么问题等价于我们要求一组路径,使得所有最大颜色都至少被访问过一次,且每个集合只经过一次,使得路径数量最小。
为了限制住这些条件,考虑对颜色拆点,限制那些最大颜色被访问过至少一次,那就是入点和出点流量至少为
考虑怎么样构造答案,每一个满流的增广路中相邻的两个表示集合的点必然意味着他们在方案中也是相邻的,使用一次 DFS 就可以抽出这些路径,注意到
11. F. Ursa Minor
Tag:S-分块,S-ST 表,S-根号分治,M,H-哈希。
首先提取一下判定条件,注意到我们操作的最小单位是
考虑如何 check,首先这个
直接做挺难的,尝试哈希,取
同样地尝试根号分治:
,仅有 个不同的 ,同样开 个数组,单点修改直接改,查询的时候 查询复杂度就是对的。 , ,注意到此时的 仅有 个,维护 的总和,那么问题变成 次查询区间和, 次修改,分块维护前缀和即可变为后缀加单点查,复杂度也对了。
总复杂度 ,是一道不可多得的分块练习题,不过我写代码的时候写错好几回,只能说我贼傻逼,Code。
12. CodeChef COLORTREE Subtree Coloring
Tag:D-树形 DP。
令
几个观察:
这样子才可能进行转移,考虑转移:
- 若讨论
, 为偶数的子树肯定是直接累乘上来,为奇数的子树,记其有 个,则答案为 ,理由是两者恰好相消,注意这里在计算的时候要算上 的取色方案。 - 若讨论
, 为偶数的子树还是只能累乘上来,为奇数的子树,同样记其有 个,答案与上面类似罢了。
复杂度 ,Code。
13. JOI 2019 Final Unique Cities
Tag:D-树形 DP;T-直径。
好题,首先对于
找出树的直径
预处理出以
- 将次长链可以踢出的点踢出点集。
- 递归最长链。
- 将最长链可以踢出的点踢出点集。
- 统计答案。
- 递归其余儿子。
- 回溯,将父亲节点踢出点集。
上述的做法可以保证在 的复杂度内求出好点集,再使用桶就可以解决整个问题,Code。
14. PTZ21W Day 9 K. Knowledge Is...
Tag:M-贪心。
直接暴力建图是不可能的,考虑贪心,维护当前已经被匹配的区间对和未被匹配的区间。
注意到我们希望未被匹配的区间右端点在合法情况下肯定越小越好,那么需要实现反悔操作,具体的,我们先按左端点从小到大的顺序排序,然后对于每一个区间,首先先看可不可以和可以匹配的匹配上,如果不行尝试反悔,反悔出一个更小的待匹配的丢到待匹配堆里,这样只需要实现两个堆就行了。
总时间复杂度
15. JOISC 2018 Day 1 Construction of Highway
Tag:T-重链剖分。
不算难的题,使用类似珂朵莉树的结构直接维护每条重链的连续段,询问答案的时候直接将所有连续段扣下来跑树状数组即可。
猜测(?)连续段的段数是
Code。
16. JOISC 2018 Day 1 Tents
Tag:D-计数 DP。
令
- 占据一行一列:
,此时帐篷有 个方向,并且选择剩下的一列有 种方案。 - 占据一行两列:
,选两个列出来。 - 占据两行一列:
,从前 个取一个出来与 凑成一列。
最后的答案是 , ,Code。
17. JOISC 2018 Day 2 Asceticism
Tag:M-欧拉数;M-组合数。
如果记得一些特殊数列就会发现问题等价于求
《具体数学》 6.38 告诉我们:
下证这个式子:尝试归纳,首先有:
证明考虑新插入一个数对连续段的影响。
假设通项对
有
由此,原命题得证,
18. JOISC 2018 Day 2 Worst Reporter 3
Tag:H-模拟。
观察到性质:每个点走的步长一定是前面的若干倍。
则可以预处理出每个人的步长,观察到步长相同的人可以被压到一起移动,这样本质不同的步长就只剩下
19. JOISC 2018 Day 3 Airline Route Map
Tag:H-构造。
如果将
考虑到
接下来就考虑如何确定这
构造
用
这样就能做到
20. JOISC 2018 Day 3 Bitaro's Party
Tag:S-根号分治。
感觉很有提示性,因为是 DAG,你是整不了什么花活的,大概率根号分治。
那就直接根号分治:
,对每个点预先处理出前 大的路径,这可以拓扑排序+归并实现,询问的时候直接扫一遍就可以了。 ,这种询问不超过 次,所以直接建反图暴力拓扑排序就行了。
复杂度 ,Code。
21. JOISC 2018 Day 4 Library
Tag:H-二分。
首先,可以询问
接下来从这一端出发来确定下一位,考虑目前的可能在这一位的集合
这样就可以做到约
22. JOISC 2018 Day 4 Candies
Tag:H-贪心;S-链表。
考虑贪心,但是会发现有可能出现第一次选了某个点
使用链表维护上述连续段,每次反悔的时候只需要将当前决策改为
23. JOISC 2018 Day 4 Wild Boar
Tag:G-最短路;S-线段树;D-动态 DP。
如果没有不能回头的限制,则答案显然是相邻的最短路之和,考虑加上这个限制之后会发生什么。
自然想到维护次短路,然而这并无法处理只需要一边不走对应边限制的情况,于是尝试预处理出如下四种路径:
- 最短路,令其起始边
,终止边 ; - 次短路,令其起始边
,终止边 ,要求 , ; - 次短路,令其起始边
,终止边 ,要求 , ; - 次短路,令其起始边
,终止边 ,要求 , ;
可以证明答案一定由这四种路径拼接而成,相邻的两段路径是否可以转移是可以手动枚举出来的,于是可以写成 DDP 的形式,使用线段树维护矩阵即可。
考虑预处理,这里很妙:把无向边拆成两个有向边,从边出发跑 dijskra,每次松弛 的时候优先松弛除了 以外的所有边,第二次到 的时候再松弛 ,这样可以保证处理出所有不回头的路径。
总时间复杂度 ,Code。
24. JOISC 2018 Day 3 Security Gate
Tag:D-计数 DP。
将左括号转为
注意到字符串合法当且仅当
Case 1. 原本就合法
直接
Case 2. 或者
默认
对于
首先预处理出
若
否则有
DP 转移是类似的,但是
统计答案只需要计算:
总复杂度
Case 3. 并且
同上,令第一个
令
令
同上 DP,对前缀的 DP 不变,对后缀的 DP 第三维需要改成
则答案是
总时间复杂度
25. 牛客多校 2019 R9 A. The Power of Fibonacci
Tag:M-CRT;M-斐波那契循环节。
尝试扩域但模数为合数,无法扩域,很难过。
尝试 CRT,发现
矩阵快速幂还是很难,但是可以尝试找循环节,让我写个暴力看看。
暴力写出来发现
于是 CRT 一下就行了,复杂度
26. 牛客多校 2019 R9 I. KM and M
Tag:M-扩展欧几里得;H-按位考虑。
枚举
施类欧几里得算法即可,复杂度
27. 牛客多校 2019 R9 F. Birthday Reminders
Tag:D-计数 DP。
令
转移只需要枚举第
- 上界:
; - 下界:
, 表示有 个人在 这个时间送礼。
直接 DP 得到复杂度 ,Code。
28. USACO 2023.12 A Graph Problem P
Tag:G-Kruskal 重构树;S-线段树。
先建立 Kruskal 重构树,这样可以将每个节点的答案拍平到线段树上维护。
而后按顺序考虑每一个非叶子节点,这个叶子节点对应的两棵子树都需要:对于一边
29. USACO 2023.12 Cowntact Tracing P
Tag:D-树形 DP;H-性质。
恐怖题目,复读一下官方题解,可能会有纰漏。首先先做预处理:处理出所有可以作为源头的点,这可以使用一次多源 BFS 实现。
有一个简单的 DP 是
令
证明:左端是简单的,忽略,考虑右边。令此时的
接下来只需要维护所有最优决策,每次向上的时候合并决策,只有在根或者
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】