专栏文章
NOIP 8/11 题解
个人记录参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mioecl2f
- 此快照首次捕获于
- 2025/12/02 17:49 3 个月前
- 此快照最后确认于
- 2025/12/02 17:49 3 个月前
T1 魔法森林
原题:P9504
题意概述:有一个 个点 条边的无向简单连通图,有两个属性 和 ,每经过一条边 就少 ,每条边有边权 ,若你在经过某条边时,属性 的值为 ,则你的属性 值会掉 ,若你需要从 到 ,求最少 属性的个数,,,。
25pts:
Subtask 3,,答案最多为 ,如果到终点的边有 的,就为 ,否则为 。
50pts:
爆搜即可。
75pts:
倒着搜。
100pts:
倒着搜,不超过 条边之后代价为 ,注意到 很小(),考虑 DP, 表示倒着走到 ,已经走了 条边的最小生命值。所以我们发现这就是分层图最短路,跑一次 Dijkstra,时间复杂度 。
注意到分层路连边每次都是 层到 层,拓扑序已经做好,所以发现不需要 Dijkstra,是一个 DP,DP转移方程式是:=() ,时间复杂度 )。
T2 异或
原题:P7335
题意概括: 个数,选出 个不交区间 ,求这 个区间异或和之和最大值
,。
5pts
爆搜,。
25pts:
dp。
表示前 个数分成 个区间的答案。
加区间:以 结尾,以 开头, 从 到 ,。
不加区间:。
总时间复杂度 。
100pts:
区间无用的定义:如果一个区间比另一个区间长,异或和又比另一个区间小。
舍弃后有多少个区间? 一定要。 要的当且仅当 ,概率为 。又 要的当且仅当 和 ,概率 ,所以一个区间有用的概率为长度分之1,所以有的个数的期望时 。
预处理有用区间后在25pts的加区间的时候只考虑有用区间,复杂度从 变成 ,所以,复杂度变成了 。
T3 小 C 的树 II:
题意:
个节点的树,你可以进行一种操作:把 号节点的子树所有都增加 ,但需要代价 ,求最小代价使得其点权都不一样且不等于 ,,点权修改后不能超过 。
菊花图,答案为 ,构造方案即可。
:
直接爆搜,有几个点,就构造 的几次方。
:
正解思路:
非常神奇。以根结点为根给每个节点做一个 dfs 序,得到每个叶子节点都代表一个区间 ,每次给 到 连边,记 为叶子数量,则构成一张 个点 的 条边的图,每条边的边权为 ,则答案为这张图的最小生成树。
为什么选最小生成树?我们需要选 条边,假如我们选的一些边构成环,对于某条边而言,环上的一条边都可以被环上其他边的加减表示,相当于被其他边取代了,这条边就是没有用的,就需要直接删去,所以 条边是一颗生成树。
为什么一定要选 个点?我们现在假设一个集合 ,,所有叶子节点 ,每次的操作就是将一个小集合剥离大集合,所以我们至少需要选择 条边,所以构成一颗生成树。
这样我们就求出了选择的最小生成树。
我们设配对点的编号等于叶子的权值,得出结论,你选择的 个叶子,选择的跳到最近的一个点必须是不相同的。DFS 一遍,每次加上这个节点的权值,并且把上面的节点的权值减去。
表示当前进行到 节点,上面已经选了 的权值,时间复杂度 ,是求最小生成树的时间复杂度。
T4 最大子段和:
原题:CF280D
题意概述:
个数, 次操作:
把 改为 。
求出 选出 个子段的最大和。保证 ,。
:
纯暴力。
:
表示第 个区间还没锁死。
表示第 个区间已经锁死了,想在第 个点再开一个新区间。
状态转移是 的,时间复杂度 。
:
线段树求区间最大子段和。
时间复杂度 。
:
,很简单(送分),答案是 。
:
注意到 很小,考虑 DP。
以拼完/没拼完设计状态。
只有两边可能没拼完。
设计状态 ,表示选择 个区间,左边选没选完,右边选没选完,状态转移也很简单。
每次 pushup 的复杂度 ,时间复杂度是 ,时限有 秒,卡常后可以过。
注意到这个东西合并是有凸性的,这样可以将时间复杂度降到 ,时间复杂度 。
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...