NOIP2024集训Day53 图论
NOIP2024集训Day53 图论
A. [BZOJ4144 AMPPZ2014] Petrol
首先注意到起点和终点都是加油站。
假设中途经过某个非加油站的点 \(u\),\(u\) 连到 \(v\),离 \(u\) 最近的加油站是 \(x\),那么从 \(u\) 到 \(x\) 加油后回到 \(u\),再到 \(v\) 一定不比直接从 \(u\) 到 \(v\) 差。
因为 \(u\) 一定从某个加油站来,设最后经过的加油站为 \(y\),\(u\) 点油量为 \(A = b - dis_{y, u}\),而如果 \(u\) 不可以走到 \(x\) 一定不能走到其他任何加油站自然也到不了终点,如果可以到 \(x\) 加满油也一定可以再从 \(x\) 回来,油量为 \(B = b - dis_{x,u}\), 因为 \(dis_{y, u} \ge dis_{x, u}\) 所以 \(A \le B\)。
考虑重新构图:\(p_x\) 表示离 \(x\) 最近的加油站,\(dis_x\) 表示 \(x\) 和 \(p_x\) 的距离,可以用多源最短路处理出所有 \(p_x\) 和 \(dis_x\)。
对于原图中边 \((u,v)\) 连边 \((p_u , p_v , dis_u + dis_v + w(u,v))\)。
这就变成了一个图,只选 \(\le b\) 的边问两点连通性,可以离线或者用 Kruskal 重构树做。
B. [BZOJ4423 AMPPZ2013] Bytehattan
由于删边不好维护,所以将平面图转化为对偶图。
这样在平面图上删边相当于在对偶图上加边,在平面图上是否联通转化为在对偶图上是否不连通。
类似于平面图的最大流转化为对偶图的最短路。
然后用并查集维护一下就好。
D. [CCO2021] Travelling Merchant/商旅
先考虑 \(-1\) 的情况。显然没有出边的点是 \(-1\),把这样的点和对应的边删掉,直到每个点都有出边。
容易发现被删掉的点都是 \(-1\),其余的都不是 \(-1\)。
对于剩下的边,\(r_i\) 最大的边如果走了,那么其它的边可以随便走,所以对应的 \(+p_i\) 没有意义。可以直接删掉这条边,然后在起始点 \(a_i\) 打上 \(r_i\) 的标记表示到达这里后资产 \(\ge\) 标记可以直接结束。
删掉边后 \(a_i\) 可能就没有出边了,也就又回到了 \(-1\) 的情况。
每个点的标记就是答案。
关键在于 逆向思维 和 归纳法。顺着做很困难,但是从结束时的边入手则很简单。每次删除一条边归纳下去也是关键。
E. [JOI2017 Final] Soccer/足球
观察几个性质:
-
一个人最多控一次球(至少进行了传球或者带球);
-
一个人的路线一定是(无球跑动 \(\rightarrow\))(带球 \(\rightarrow\))传球/带球(带括号表示非必选项);
那么当一个球停在了位置 \((x,y)\),那么在某种最优解中,移动至 \((x, y)\) 并继续控球的一定是离 \((x, y)\) 曼哈顿距离最小的一个。
那么我们可以把一个位置 \((x, y)\) 拆点:(设总点数为 \(m\))
设为 \((x,y)_k\)(\(k\in{0,1,2,3,4,5}\))
其中,\((x, y)_4\) 表示球到了 \((x, y)\),且没有人控球状态小最小疲惫值;\((x, y)_5\)表示球到了 \((x,y)\),且有人在控球状态下的最小疲惫值;\((x,y)_{0,1,2,3}\) 分别表示球正在向上下左右滚动状态下的最小疲惫值。如此一来,我们就可以建图跑最短路。
其中有一个代价,就是一个人传球时,代价为 \(a\times p+b\)(\(a,b\) 是常数,\(p\) 是传球的距离),此时我们把 \(a\times p\) 的贡献分配到每条边上,\(b\) 的话也是可以分配到某条边上的。
最终跑一个 Dijkstra 最短路即可。
F. [COI2012] TRAMPOLIN
建立一个传送点,然后变成某个点开始的种类最长路。但是存在环,所以我们可以缩点。
然后记忆化 dfs 或者拓扑即可。

浙公网安备 33010602011771号