一般图最小匹配
有 个数,第 个数为 。需要选择 对数,每次选择没有被选择过的数 ,该次权值则为 。求 次选择之后的最小权值。
首先,我们将 排序,那么我们必定会选择相邻的两项,否则不优。接下来我们考虑算法,不难观察到 ,这代表着我们肯定可以使用 或 的算法。
结合题目的性质,我们不难猜出这是一道简单的序列 dp。设 表示为在前 个元素已经选择了 对,第 个元素是否被选择,的最小权值。
考虑转移。对于元素 ,有两种可能:与 绑定或不选。对于选择的情况,可以从 不选择得来,即 ;不选的情况有两种,一种是 被选择,一种是 没有被选择,即 。最后 就是答案了。时间复杂度 。
需要注意一下本题在实现过程中的细节。本题最大的答案仅有 ,因此不用开 long long,如果你不小心使用了 long long 且定义了 的数组,那么就会遗憾 MLE。可以使用滚动数组优化。
好渴鹅因为在 dp 的过程中没有特判 ,导致第 个元素和第 个元素配对,遗憾 分。
重定向
有长度为 的序列 ,第 个数为 。可能会有若干位置上没有数,表示为 。现在需要从 个数当中删除任意一个数(可以删除空的位置),然后对于剩下的空的位置,可以填入 的数,但是需要保证填写完之后 没有重复的数,且字典序最小。输出填完后的序列。
由于字典序是从左往右找到第一个不相同的元素开始比较的,因此我们从左往右枚举 判断 能不能被删除且答案能最优。不难发现有三种情况:
- 且 ,即 与 都不为空,此时如果 ,就可以删除 让 顶替 的位置;
- 但 ,即 不为空但 为空,我们可以删除 并拿最小的未填数填进去,仅当未填数比 小不然不优;
- ,此时可以填两种:最小的未填数和最小的 满足 ,任选一个小的填进去即可。
删除最优的位置后,就使用优先队列对 的未填数填入即可。时间复杂度 。
斯坦纳树
给定一张图 和点集 ,需要找到原图的一张子图,涵盖点集 且连通,边权和尽量小。有一个问题:给定一棵树 ,每次给出点集 ,求 在 上的斯坦纳树边权和。
牛牛不会做这个问题,于是提出乱搞做法:建立新的完全图 ,每一个点都对应 的一个点,两个点的边权为 对应的点在 的树上距离,最后将 的最小生成树作为答案。
牛牛想要知道,这种乱搞算法在什么情况下是正确的。给出排列长度为 的排列 ,牛牛想要知道对于 在点集 上的正确性。
体检,没时间做题,输出 个 , 分。
直径
给定 ,求 个点组成的无标号无根树当中,直径长度为 且有 条直径的树的数量有多少,答案对 取模。
体检,没时间做题,输出 , 分。
总结
- 排名:;
- 比赛分数:;
- 情况:相比 2024.10.10 模拟赛,还行;
- 问题:dp 水平不算好,不注重细节。