AGC029
A
即 序列逆序对个数。
时间复杂度 。
B
不难证明按照和从大到小匹配并删除即可。
时间复杂度 。
C
二分答案并贪心安排,模拟在字典树上 dfs 的过程即可。
本题主要是代码难写。
时间复杂度 。
D
为什么这个题能放 D。
注意是先手希望操作次数最大,所以先手如果能操作就必须会操作。后手的策略肯定是把先手弄到一个障碍物下面,但是可能因为障碍物遮挡不能每轮都移动。
处理出到每一列 的最小值并枚举这一列的障碍物更新答案即可。
时间复杂度 。
E
降智了,没想出来!!!
钦定 为树的根结点,记 表示 的路径去掉 以后的最大值。如果我们扩展到了一个点 ,我们肯定会扩展到所有的 ,满足 。所以对于两个点 和 ,记它们的 LCA 为 ,则 会对 产生贡献当且仅当 在 的子树内,或 ,后者与 无关。注意到对于一个 ,满足条件的 肯定是从 开始的一条往上的链,所以 会对一个子树内的点产生贡献,可以使用树上差分维护。
至于如何找到 ,考虑 路径上的最大值 ,显然 以上是不行的、 以下可以,问题在于如何判断 可不可以,再记录次大值即可判断。
时间复杂度 。
F
考虑每次剥离一片叶子。如果我们从一个集合中选择两个点连边,并钦定其中的一个为叶子,那么我们把这个集合和其他集合内被钦定为叶子的这个点全部删去,就可以转化为一个子问题。发现这条边的另一个点并不重要,我们只需要保证删去叶子时集合内的点数 即可。
我们把上面的操作换个形式:有一个 的棋盘,每个格子内有 或者 ,要进行 次操作,每次操作如下:
- 选择一个为 的格子,使得其所在行中 的个数 ,然后把以它为中心的十字里的数都变成 。
先不考虑删的顺序,我们找出一组可能的 次操作所选的格子集合。这是一个二分图匹配,如果找不到的话显然无解。设第 行选择的格子在第 列,我们按照如下方法构造答案:
- 维护一个队列,其中只有一个初始元素,为唯一没有被选择的列的编号。
- 进行 次如下操作:取出队首元素 并弹出(如果没有则判定为无解并退出),枚举所有使得第 行第 列的格子里的数为 的 ,如果第 行还没有选边的话则钦定第 行的边为 ,然后把 加入队尾。
其实就是把上面的操作倒过来进行。
如果操作能顺利进行的话,最后构造出来的解显然是合法的。现在的问题在于:我们有没有可能把有解的情况误判为无解呢?
答案是否定的。事实上,能够找到一组匹配是不够的,我们容易找到比它更强的有解的必要条件,那就是:对于任意 个集合,其并集大小 。可以证明在满足这个条件的情况下一定存在解,即它也是充分条件,所以并不会出现误判的情况。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App