NOIP2024集训Day44-45 图论

NOIP2024集训Day44-45 图论


A. [BZOJ3706] 反色刷

欧拉回路,易于发现有解的充要条件是没有奇点。

我们需要注意到,白边不一定不走,只要走偶数次就可以。

所以我们可以将白边堪称两条黑边,这样对每个点的奇偶性是没有影响的,而且同样是求欧拉回路。

用并查集先维护出连通块之后,只需要记录一下每个连通块是否有黑边,如果有黑边就要刷一次,没有就不要。无解同样用奇偶性判断。


B. [省选联考2020 B卷] 丁香之路

很经典的模型(但是我不会),首先起点和终点连一条边,然后考虑加最少的边使得有欧拉回路。

欧拉回路有两个条件,度数都是偶数很好满足,直接把相邻的奇点连边肯定最优,但还需要满足连通的条件。

考虑到图上边权的特殊性,我们显然只需要使用形如 ii+1 的边,而这些边没有必要替代之前新加的边。所以直接拿这些边跑剩下连通块的最短路就好了。

时间复杂度 Θ(m+n2logn)


C. [AHOI2014] 骑士游戏

SPFA 处理有后效性 dp。

fi 表示杀死 i 号怪物的最小花费,则 fi=min(ki,si+fj),其中 ji 用物理攻击后可以分裂为的怪物。

直接 dp 存在后效性,所以我们用 SPFA 来跑这个 dp。

每更新一个点 A 的 dp 值,就会有若干个点的 dp 值可能被更新,即可以分裂出点 A 的那些点。所以 A 出队后一旦 dp 值被更新,就把那些点入队。

初始时把所有点入队。


D. [APIO2015] 雅加达的摩天楼

分块思想 + SPFA + 建图优化。

看到题目第一眼肯定会想到最短路,但最坏情况有 n2 条边,显然任何一种最短路算法都不能过。

所以我们考虑用分块的思想来优化建图。

  1. Pi>n,暴力加入每一条边,每次最多 n 条边。
  2. Pi<n,对于每个点添加 n 个辅助点,这里可以理解成一栋楼有许多层,每一层一步能走的范围都不同,然后每一层分别连边,每一层到楼底连边。对于一只 doge,从楼底到 Pi 对应的楼层连边。边数是 Θ(nn) 的。

综上,总边数和总点数都是 Θ(nn)


E. [JOI2020 Final] 奥运公交

双倍经验

直接跑最短路,然后考虑翻转每一条边后怎么快速地计算代价。

显然如果这条边不在 1n 或者 n1 的最短路上,直接考虑强行走过这条边的最短路就行了,可以通过记录最短路和次短路(要求前去不同的最短路)来实现。

否则,这样的边只有 Θ(n) 条,直接重新跑 Dijkstra 即可。


F. [NOIP2017 提高组] 逛公园

首先肯定要求最短路,然后就变成 dp 了。

fi,j 表示到点 idisij 的路径条数,于是有:fi,j=fk,disidisk+jdi,k

然后记搜就完了。

解释一下 disidisk+jdi,k 的来历:

x+disk+di,kdisi=j,其中 x 表示如果到点 idisij,那么到点 k 应该比 disk 大多少。

对于判断 0 环,就开个数组记录一下 fi,j 是否已经存在,存在就直接跳过。


M. [CF1521D] Nastia Plays with a Tree

看了官解。

有一种贪心的构造法。如果一个点,有至少两个儿子节点,就不用让它与父节点连边,它的父节点就可以去连接别的儿子,而对于这一步来说,丢失的边数量都是 deg2

那么做法就很简单了:如果只有一个子节点,接上去;否则断掉它与父节点的连边,并且任选两个子节点上去。


本文作者:Leirt_Abu

本文链接:https://www.cnblogs.com/Leirt/p/18447638

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Leirt_Abu  阅读(8)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起