【杂题乱写】2023.12 #1
因为是月末,所以可能这篇博客只有极少量的题目。
Gym-101221B Buffed Buffet
离散和连续分别考虑。
离散看上去是一个闵可夫斯基和做 \((\max,+)\) 卷积的东西,问题是有定义的位置是 \(w\) 的倍数,显然是不能差分归并的。发现对于每个 \(w\) 只能取 \(\left\lfloor\frac{W}{w}\right\rfloor\) 个,并且每个的贡献越取越小,所以贪心维护需要的个数,这样总数是 \(O(W\log n)\),直接背包 \(O(W^2\log n)\) 能过。
连续的情况开始考虑的是合并二次函数,合并发现没有常数项的合并出了常数项,问题在于实际的定义域是非负实数。所以不考虑积分后的二次函数了,直接看作选 \(\mathrm{d} w\) 的物品减少产生 \(\mathrm{d}t=\Delta t\mathrm{d} w\) 的贡献,那么一定贪心选初始 \(t_0\) 最大的一个,直到某两个物品当前贡献相同,此时同时选这个两个物品,选择的比例是 \(\frac{\Delta t_2}{\Delta t_1}\),算一算发现相当于新的 \(\Delta t\) 是二者的调和平均数。
提交记录:Submission - Gym
Luogu-P4220 WC 2018 通道
边分治题目,分治边两侧子树点对的 \(\mathrm{LCA}\) 一定之和一侧的子树有关,所以可以与到根节点距离视作常量 \(val_u\)。
对第二棵树建虚树,相当于枚举 \(\mathrm{LCA}\),此时 \(val_u\) 又算上了第二棵树上到根节点的距离,现在就是求类似 \(val_u+val_v+\mathrm{dist}_3(u,v)\) 了,因为边权都非负,可以用一些直径相关的结论。
这里大致做法非常显然了:维护子树在第三棵树上的直径,合并算答案。但实际上要求的是端点异色的直径,直接维护这样的直径可能出现一个子树内节点同色或者是实际的答案被忽略的情况,原因在于异色直径不一定是全局直径,扔掉了一个全局直径的端点就可能算错答案。解决方法是对每个子树维护同色直径,异色的直径端点一定来自同色直径,那么直接合并到时候更新答案就行了。
提交记录:Submission - Luogu
这份代码在 UOJ 好像过不去 hack,原因未知。
CodeForces-103E Buying Sets *2900 / LibreOJ-6045 雅礼集训 2017 Day 8 价
题目容易转成”选一个集合就必须选包含的所有元素”这样的抽象限制,感觉是一个左部点集合右部点元素的最大全闭合子图,最小转最大都取反就行了。
问题是题目还要求保证选的集合大小与集合并的大小相同,但是给的保证实际上就是 \(|T|\le |N_G(T)|\),满足 Hall 定理,那么最小割的边数一定是 \(n\)。而最大权闭合子图实际上左侧割掉是不选,右侧割掉是选,这样不选的集合个数与选的元素个数和是 \(n\),自然选的集合个数和选的元素个数就相等了。限制不攻自破了。
Luogu-P9755 CSP-S 2023 种树
先考虑二分答案。
这样对每个 \(u\),容易求出 \(t_u\) 表示第 \(u\) 棵树最晚要在 \(t_u\) 时刻种下才能在 \(mid\) 时达到 \(a_u\)。
现在还有一个树的限制,设 \(f_u=\min_{v\in \mathrm{subtree}(u)} \{t_v-\mathrm{dist}(u,v)\}\),初始只能选 \(1\),每次取出 \(f\) 最小的,将儿子放进堆里,如果存在某个时刻取出的限制 \(f\) 已经无法满足了,那么就不合法。
求 \(t\) 的部分需要一些精细计算。
感觉 CSP 亏了一个亿。
提交记录:Submission - Luogu