题目:2024.10.13 题目

一般图最小匹配

个数,第 个数为 。需要选择 对数,每次选择没有被选择过的数 ,该次权值则为 。求 次选择之后的最小权值。


首先,我们将 排序,那么我们必定会选择相邻的两项,否则不优。接下来我们考虑算法,不难观察到 ,这代表着我们肯定可以使用 的算法。

结合题目的性质,我们不难猜出这是一道简单的序列 dp。设 表示为在前 个元素已经选择了 对,第 个元素是否被选择,的最小权值。

考虑转移。对于元素 ,有两种可能:与 绑定或不选。对于选择的情况,可以从 不选择得来,即 ;不选的情况有两种,一种是 被选择,一种是 没有被选择,即 。最后 就是答案了。时间复杂度

需要注意一下本题在实现过程中的细节。本题最大的答案仅有 ,因此不用开 long long,如果你不小心使用了 long long 且定义了 的数组,那么就会遗憾 MLE。可以使用滚动数组优化。

好渴鹅因为在 dp 的过程中没有特判 ,导致第 个元素和第 个元素配对,遗憾 分。

重定向

有长度为 的序列 ,第 个数为 。可能会有若干位置上没有数,表示为 。现在需要从 个数当中删除任意一个数(可以删除空的位置),然后对于剩下的空的位置,可以填入 的数,但是需要保证填写完之后 没有重复的数,且字典序最小。输出填完后的序列。


由于字典序是从左往右找到第一个不相同的元素开始比较的,因此我们从左往右枚举 判断 能不能被删除且答案能最优。不难发现有三种情况:

  • ,即 都不为空,此时如果 ,就可以删除 顶替 的位置;
  • ,即 不为空但 为空,我们可以删除 并拿最小的未填数填进去,仅当未填数比 小不然不优;
  • ,此时可以填两种:最小的未填数和最小的 满足 ,任选一个小的填进去即可。

删除最优的位置后,就使用优先队列对 的未填数填入即可。时间复杂度

斯坦纳树

给定一张图 和点集 ,需要找到原图的一张子图,涵盖点集 且连通,边权和尽量小。有一个问题:给定一棵树 ,每次给出点集 ,求 上的斯坦纳树边权和。

牛牛不会做这个问题,于是提出乱搞做法:建立新的完全图 ,每一个点都对应 的一个点,两个点的边权为 对应的点在 的树上距离,最后将 的最小生成树作为答案。

牛牛想要知道,这种乱搞算法在什么情况下是正确的。给出排列长度为 的排列 ,牛牛想要知道对于 在点集 上的正确性。


体检,没时间做题,输出 分。

直径

给定 ,求 个点组成的无标号无根树当中,直径长度为 且有 条直径的树的数量有多少,答案对 取模。


体检,没时间做题,输出 分。

总结

  • 排名
  • 比赛分数
  • 情况:相比 2024.10.10 模拟赛,还行;
  • 问题:dp 水平不算好,不注重细节。