本题是求解在给定的图中,从每个起点出发,是否存在一条路径满足所有需求点之间的距离和不超过 $D$。因此,我们可以考虑对于每个起点 $i$,使用 Dijkstra 算法求出其到其他所有点的最短路径,并判断是否存在一条路径满足所有需求点的限制。

首先,读入输入数据。使用邻接表存储图的结构,然后读入需求点的位置。

接下来,对于每个起点 $i$,我们使用 Dijkstra 算法求出其到其他所有点的最短路径。具体实现中,我们使用一个小根堆维护当前需要更新的点,每次取出距离 $i$ 最近的点 $u$,然后遍历 $u$ 的所有邻居 $v$,如果从 $i$ 到 $v$ 的距离可以通过从 $i$ 到 $u$ 再到 $v$ 的距离更新,则更新 $dist[v]$ 的值,并将 $v$ 插入堆中。

最后,对于每个需求点 $(s, t)$,判断 $dist[s]$ 和 $dist[t]$ 是否都不为 $INF$,并且 $dist[s]+dist[t]\leq D$。如果存在一条路径满足需求,则令答案增加 $1$。

最终,输出答案即可。

#include iostream#include vector#include queue#include limitsusing namespace std;const int INF = numeric_limitsintmax;void dijkstraint s const vectorvectorpairint int& adj vectorint& dist int n =

原文地址: https://www.cveoy.top/t/topic/bXOu 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录