2026年NOICA联盟-NOIP模拟赛(一)

https://cplusoj.com/d/senior/contest/6a9ba933cccbc18957c89cd7

ori:
QOJ1173 Knowledge Is...
-
P16365 [OOI 2026] Tasks from Sasha
P15952 [ICPC 2018 Jakarta R] Rotating Gears

项目分配 project

每个点能匹配的是一段 \(L_j>r\) 的区间,这提示我们按照左端点从小到大排序。
对于 \(i\),考虑匹配 \((j,i)\),拉出 \(r\) 最小的 \(j\)
若没有匹配的 \(j\),那么考虑拆掉 \(R_k\) 最小的一组 \((j,k)\),然后匹配 \((j,i)\),这只要求 \(R_k<R_i\),并把 \(k\) 拉出来继续匹配。

考虑一条从上到下的路径,从左到右的路径可能会穿过一些从上到下路径的点,拉出来那个分叉点就好了。
这样跑三次 dij 就好了。

楼层任务 tasks

考虑 \(x_i=u\) 子树内乱选一些点,他们可能在 \(u\) 的某个儿子子树 \(v\) 内,要减去。但是可能什么都没选,会被算 \(1-|\mathrm{son}|\) 次,所以系数为 \(|\mathrm{son}|\)
这样,给定一些点,他的子集必须在他的子树内,没有对 LCA 的要求。
所以可以变成 \(\prod (1+dep_u)\) 的一个东西,其中 \(dep_u\) 表示祖先链上关键点个数之和。
这样可以导出一个 \(nk\) 的暴力 dp。

然后我们发现只有 \(x_i\) 的转移比较难做,其他都是简单的乘上一样的深度。
所以我们拉出虚树跑 dp,唯一的问题在于 \(v\) 选择了一个没有关键点的子树,考虑他是 \(\prod (dep)^{siz_v} \sum \frac{(dep+1)^{siz_v}}{dep^{siz_v}}\),那就只用关心 \(siz_v\),而相同的 \(siz_v\) 可以一起算,复杂度 \(O(k^2+n+k\sqrt{nk})\)

旋转齿轮 gears

维护所有节点的度数绝对值,这样奇深度节点的取负即可。
先考虑查询怎么做,也就是连通块大小。令被拿出来的齿轮被染黑,我们要求白连通块大小。
就是找到连通块的根,然后减去子树内最上方的黑点 siz。
那么每个黑点可以贡献到下一个黑点以前的祖先链,维护这个事情。
那么每次加删黑点就只需要找到祖先链上第一个黑点,这个可以 1log 求。

然后是维护连通块加,这个其实和上面差不多,就是反过来而已。
整个题只需要树剖+BIT 即可 1log 维护。

posted @ 2026-09-05 15:10  TallBanana  阅读(21)  评论(0)    收藏  举报