跳转至

11.航空路线问题

题目

给定一张航空图,图中顶点代表城市,边代表 2 城市间的直通航线。现要求找出一条满足下述限制条件的且途经城市最多的旅行路线。 (1) 从最西端城市出发,单向从西向东途经若干城市到达最东端城市,然后再单向从东向西飞回起点(可途经若干城市)。 (2)除起点城市外,任何城市只能访问 1 次。 对于给定的航空图,试设计一个算法找出一条满足要求的最佳航空旅行路线。

题解

最长不相交路径模型。 可以将题目要求(即从点 1 到点 N, 然后回来,而不经过重复点的路径)转换一下,变成两条从点 1 到点 N 的没有重复点的路径。

由于每个点只能使用一次,那么我们会非常 熟练 自然的想到可以拆点,由于只能用一次,那么对于每一个点 u​ ,将其拆成两个点 u_1, u_2​u_1​ 放到 X​ 集合中, u_2​ 放到 Y​ 集合中,然后由 u_1​u_2​ 连边 (1, 1)​ (特别的, 1​N​ 的容量为 2​ ),对于原图中的边 (u, v)​ ,在建图时由 u_2​v_1​ 连边 (1, 0)​ ,然后跑一遍最大费用最大流,如果点 1_1​1_2​ 的连边不是满流就无解,注意可能要特判一下 1->N->1​ 的这种图。