1.08
求每个询问串的所有循环同构在主串中出现的次数总和。
向后遍历可做,现在需要删掉开头。删除开头 减 ,如果 ,那 就不能再在这个节点,。
1.09
子串 的所有子串和 的最长公共前缀的长度的最大值。
二分答案 ,询问 是否在 中出现。设节点 表示 ,问 的 endpos 是否在 中有元素。
记录 表示 ,倍增 parent tree 跳到 。动态开点线段树合并 endpos 集合。
1.10
因为是对偶数位操作,将每两位和为一位。令 为 , 为 , 为 , 为 。如果有解,则 。
考虑从一个大问题转换为小问题。要找到一种方法使得在不改变其他结构的同时移动 。操作 和 可以实现两步将 换到 , 不改变结构的移到 。
所以从后向前,设当前维护到 ,此时 分别等于 。找到 且 ,执行上面操作即可。共 次操作。
现在问题是, ,我们要反转一次使 。
我们可以找到 中某个前缀,使得 ,翻转这个前缀。否则一定有 的某个前缀,使得 。这时翻转 的这个前缀得到 ,把 做成 再翻转这个前缀。
转换题意。对于 的 ,加入 , 长为 。
发现可行的 上操作对应 上:
显然优先操作一,答案与 中出现次数最大的 有关,设为 。
从左到右操作,可以不用线段树,记录已删除量 。处理细节。
结束后栈不空,用操作二一个一个做。可能忽略 ,再用一次操作全部做完。
先求出可行的最大最小答案。
一条边将树分为 和 ,能贡献最大为 ,最小为 。最大时,间两两连边,最小时, 内部互相连,多出 。
拆开 ,可以取重心为根,最大贡献为向下的 。最大时所有路径跨过根。因为重心子树大小最大小于 ,构造取 dfn 序, 与 连边即可。
最大时点的贡献是到根的距离。取点 ,lca 为 。本来 各自的贡献是 ,连 后,贡献为 ,变化量模 为 。
从 变化为 。每次取出最大的 的 改为互相连,然后删掉。要保持重心结构,所以从最大 中选。最后当 ,因为 从最大往小,沿树向上一定找得到符合条件的。最后对没删掉的节点跑最大的构造。
1.11
次查询区间 01 背包,值域 。。
可以 合并背包 和 求出单个 值。。
猫树分治:选取所有询问都包含的某个位置,分别向左右预处理。对于询问的回答,只需要在左端点取信息,在右端点取信息,再合并即可。
分治 表示处理 的物品和 的询问。取 ,向左右背包。遍历 的询问,如果在左右就下放,否则合并算出答案。
复杂度 。
P5546 做区间询问。
选 作为文本串对其他所以 建的 SAM 匹配。复杂度 , 为定值, 越小越好。
猫树分治 ,选最小的 处理跨过 的询问。 过长复杂度退化,不能取中点分治。
取阈值 ,长度小于 的为短串,在短串中取中心。如果没有短串,。对于 ,最多分治 次,区间大小 ,匹配串 长 。共 种 ,复杂度 。
开一个大数组,然后用指针标记位置。
平面图最小割与对偶图最短路等价。
有向图欧拉回路当且仅当每个点入度等于出度。给无向边定向。先随便定向,记 。改变方向时 ,看作流量变化,连 。 的连 , 的连 。跑网络流看是否满流。
最大流等于最小割。 条特殊边割或不割 个状态。对于一个状态,先不管特殊边边权,割掉要割的特殊边,跑最小割,在加上要割的特殊边边权,对所有状态取 min 即为答案。
当特殊边边权为 ,一定被割;边权为 ,一定不割。
从全不割到全割的转移。在旧状态的残余网络上改边权再跑即可,。记录 个网络和当前状态的答案。
dinic 常数大,残余网络上用 FF,不过跟复杂度无关。
1.12
长度为 的数列,支持:单点修改,区间询问至多选 个的不交子段和的最大值。
连 , 表示选 。要求至多 流的最大费用。
参考网络流反边,相当于每次取最大子段,再反转,重复 次。线段树维护从左、右开始最大值和位置,区间最大值和位置,以及反过来最小值。用栈记录翻过的位置,最后翻回来。
网络流。同 P2762 太空飞行计划问题 建图方式,将物品与 连 ,警察与 连 ,警察与对应的物品连 ,答案为所有物品的收益和减最小割。,显然跑不了网络流。考虑模拟最大流。
首先要描述警察 与物品 的关系。要满足:
令 。得到 ,能很好描述。
将物品和警察放在一起从左到右,从上到下考虑,自然满足 。贪心,一个警察 的流优先从 且 最小处流过来,因为更大的 能满足更多人限制。用 set 储存物品,警察处 lower_bound 查找。
划分序列,代价为 加区间逆序对数,求最小代价。
,满足决策单调性,单层转移。问题在求区间逆序对数。考虑类似莫队,要求左右两端移动次数不能过大。分治 中 移动 次,可以接受。cdq 分治分层做 sovle,维护树状数组。复杂度 。
1.13
一个序列的 即每次删除一个包含 的前缀能删的次数。
设 表示 中强制选 并正好选出 的子序列数。。设 表示以 结尾并强制选 的答案为 的数量。。因为答案小于 ,复杂度 。答案为 后乱选,设 表示答案至少为 的数量。,差分得答案。
求 在 中哪个串出现次数最多。
对 建广义 SAM, 在上面跑匹配。如果 在 中出现,倍增找到 对应的节点。每个节点动态开点线段树,下标为 的编号,记录出现次数最大值和下标,线段树合并。
1.14
求子序列最长长度使 lis 比原序列 lis 小。
连边 ,,, 跑最小割。模拟最大流。分层,对于点 。 去到 层的区间 满足 。对于一个流,优先向 去,因此不需要退流。记录 表示是否走过, 指向下一个 的点。 模拟。
1.15
树上节点 有 个石子,每次选任意个移到 级祖先,不能动输,问以每个点为根先手胜负。
模 相等的分别考虑 SG 值。当 为偶数时, 没意义。因为先手移偶数位后手可以移回奇数位。设 表示 时的 SG 值。换根 dp。
初始全为 ,模 意义下最少多少次区间加 得到 数组。
如果不模 ,差分得 ,。预先对 区间加 代替取模,,最小化 。反悔贪心,取出最小的 和当前 做区间加后 ,把 入队。
中位数相关,考虑 的 设为 , 的 设为 ,做前缀和。 时可以任意排列。
-
, 的 放在 前,设为 。。
-
否则, 的 放在 后,设为 。。
要动态维护 。可以按 从小往大加入。初始时 ,当 改为 时,线段树维护区间 减 。。
求恰好满足一个条件中的 个数: 是 编号最小的点; 是 编号最大的点。
容斥,。建大根、小根重构树,。 为在两棵树都有祖先关系的点对。枚举一边,树状数组维护从根到当前节点在另一颗树上的 dfn 序,区间查询,单点修改。
。求 。
。lcp 看作公共前缀数量。记 表示节点 endpos 集合大小,对每个节点计算贡献,有 个串,每个串出现在 个后缀的前缀中,贡献 。
翻转建 SAM,lcp 转换为最长公共后缀,即 parent tree 上的 lca 的 len。记录子树内最大、次大、最小、次小。
极小的 mex 区间有 个。枚举 维护所有极小 ,不断向左右一边拓展至最近的 ,得到 的一个区间,所有这些区间包含所有极小区间,每次转移前删去非极小区间。计算区间 mex:可持久化线段树, 为版本,维护每个值最后出现的位置,二分。已知有极小区间 ,找到左右的 ,则 。所有 中的 存在 ,记录加入和删除位置,用 set 扫一遍。
1.16
观察发现,第 行 ,则第 行能取 的位置是 和 的一个前缀。
但可以空一些行和列,考虑将所有有 的行和列压起来。设 表示前 行,有 个列有过 ,上一行有 个 ,强制连续选。首先可以取一个前缀,,后缀和维护。其次可以向前任意取,但强制连续选,枚举选 个,,维护一个斜线的前缀和。。再加上全取 的情况。
注意取模优化和枚举时 的常数!
1.18
分层,只有层间和向下层的边。设当前层 个点, 个二度, 个三度,层间连 条。
-
向下层:
-
层间:,将二度点当两个点,再出去对的相对顺序。
-
容斥掉 个重边、 个自环,设 :
维护一个可行答案集合,取出两个询问,将不可行的扔掉。要保证每次询问不能问到粉边,要求每个粉连通块只有一个点在集合中。强行当成 DAG,如果不行再将联通块其他点加入。
构造。将边拆为 和 ,二分图,如果能使每个点极差不超过 ,合并后不超过 。设点 度数为 ,拆为 个点。边染色使所有出边颜色不同。同 CF600F。
1.19
-
必胜。 必败。
-
否则 模 必胜。
-
否则 模 必胜。
-
否则模 后如果 或 必胜。
-
否则 必败,否则模 得 必胜。
如果 ,难以分类讨论。有 ,状压计算出现次数和胜负。
圆方树。求出点双,对每个点双建方点,原图点是圆点,方点与对应的圆点连边。
当进入一个点双,一定能到点双中权值最小的点。方点权值为最小的圆点权值,multiset 维护删除,树剖维护路径最小值。
1.20
对于不互质的数,后手操作后先后顺序不变。对所有不互质的连边。要求定向后最大拓扑序最小。按权值从小到大 dfs 儿子连边,拓扑时用优先队列。
1.21
从长为 和 的回文串开始枚举左右出边 bfs,复杂度 。减少无用的边。将 和 分开,形成若干连通块。如果连通块为二分图,两点间奇偶性相同,可以反复横跳,取生成树即可。不是二分图,连自环即可。边数将为 。
1.22
枚举每个颜色 ,枚举右端,线段树区间维护左端 min 和 max 是否符合条件。
树形 dp。设 表示 子树内分 段的最大数量。难以记录 所在连通块状态。设 表示最大数量下 的值。背包 。
1.23
是基环树。先考虑树。如果从一个点开始,定为根,。换根 dp 即可。
把环找出来,考虑在环上点 的子树中开始染色的答案。染色的方式是大致是从子树的叶子开始向上。对 的每个非环上儿子做树的 dp。记 表示从环上进入子树向下染色的答案, 表示换根的、从子树内任意节点开始染色的方案。从环上 的非环上儿子 的子树开始的答案是 ,。染完环上 的子树后,绕环染环上点。再从除 外的环上点向下染其他环上点的子树,答案为 。
发现前后贡献固定,变动的是染环的顺序。染环是染一个区间,每次向左右拓展。每次染一个点,答案加上当前连通块大小,当前连通块大小减 。贪心向小的染是错的,因为有后效性。记录 的前缀和,区间 dp, 向左右转移,滚动即可。
1.24
维护 的数量、和、平方和。
对于平面图,,顶点数、边数、平面数。每个面至少围 条边,每条边对应两个面,,。平面图存在点度数小于等于 ,对偶图也是平面图存在点度数小于等于 ,平面图存在环小于等于 。判三、四元环。
根号分治,按度数、大小定向为 DAG。复杂度 。
连成若干个环,。要 ,取 。构造交换相邻的方案。
1.28
cdq 分治拆成 到 的贡献。
对于一个区间计算答案可以用 dp 完成。以 为交界合并左右的 dp 值。设 表示区间 或区间 ,是否选 或 的答案。记跨过 的贡献为 。
记 。
后面两个直接做,前面的对于每个 拆开 max 计算。
对 的 排序,二分 的位置,记录 的后缀和即可。递归 和 解决。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现