题意:
农场里有n块地,其中约翰的家在1号地,二n号地有个很大的仓库。
农场有M条道路(双向),道路i连接着ai号地和bi号地,长度为ci。
约翰希望按照从家里出发,经过若干块地后到达仓库,然后再返回家中的顺序带朋友参观。
如果要求往返不能经过同一条路两次,求参观路线总长度的最小值。
解析:
如果只考虑去或者回的情况,问题只不过是无向图中两点之间的最短路问题。
但是现在要去要回,并且不能经过相同的道路,这样。
如果先计算去时最短路,再计算回来时最短路,是不行的。(dp思想)
所以,来求从1号顶点到n号顶点的两条没有公共边的路径。
所以,把顶点之间连接一条流量为1,费用为路程的边。
这样转换之后,就是流量为2的最小费用流了。
敲了n遍有流量限制的网络流,终于a了。。。
代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <stack>
#include <vector>
#include <queue>
#include <map>
#include <climits>
#include <cas