2023.10.12 祭品圣遗物

A. 异或

矩阵中 下三角阵加法 的 Trick:考虑 横向、纵向、对角线方向分别差分,然后分别按照对应方向求前缀和再相加得到一个位置的实际值。

B. 游戏

给定一个大小为 n 的整数集合,A 和 B 轮流操作共 m 轮。第 i 轮有一个参数 bi 表示此次操作要么从集合删除 bi 的倍数,要么删除非 bi 的倍数的数。最终剩下的数字和即为权值,A 希望最大化权值,B 则反之,求各自最优行动后的结果。n2×105,m2×104

把操作看成 01 序列,朴素做法是所有 2n 种方案,这时会发现绝大多数方案都只会剩下 0 个数。实际上,

断言:所有方案剩下的数之和仅为 n

这是因为从 1m 考虑每次两种操作,分别得到原集合的两个互不相交的子集。相当于从根出发 DFS 一个深度为 m 的 01Trie 并分割一个集合到儿子,最后自底向上合并答案(根据深度从两个儿子的答案中取 min 或者 max,对应当前位置的决策走到哪个儿子)的过程。而绝大多数情况下都有一个儿子对应集合是空的,可以直接剪掉(答案为 0),使得树的大小与时间复杂度都达到 O(nm)

进一步发现,若每次都走到对应集合较小的儿子,最多 log2n 次就能达到空集即答案为 0;考虑到轮流操作,最多 2log2n+1 次双方就一定都能取到答案 0。因此当 m>2log2n 时答案一定为 0。阈值分治一下,复杂度来到 O(nlogn)

C. 连通块

考虑一无向图,给定各点点权,任意点权 gcd合数的两点间有连边,最小化删去一个点后的最大连通块大小。n105,值域为 107

这个询问显然是 Tarjan 求出所有割点,在圆方树上统计。只需考虑优化建图。

注意:Tarjan 考察的是连通性问题,因此只要保证原图中的每个点对,连通性在优化后图中不变即可。套路地 d|gcd(i,j)d|i,d|j,因此只需要找到 没有更小合数因子 的合数,建立 虚点 连接所有出现过的倍数,虚点 siz0

线性筛求出所有质数。可见满足条件的合数的恰好是两个(可重)质数相乘。对每个点权值分解质因数后两两相乘,可知其有最多 O(log2V) 个这样的合数因子,于是总边数 O(nlog2V)

D. 公交路线

考虑一棵树,点有颜色,q 次询问,第 i 次求不允许以 ui 为端点的前提下,树上选出自身两端点同色的两条不相交路径的本质不同方案数。

相当于要求 hu 表示有以 u 为一端点的方案数。则询问答案为 vuihui2

posted @   音街ウナ  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示