难度:3
这时求最短路径,但是从1求其它方便,反过来就比较麻烦,因为所有的路都是单向的,为了降低时间复杂度,可以将这个图扩充一下,1对应n+1,然后所有的边都反过来建,2到3那就是n+3到n+2,最后再补充一条边,从1到n+1,距离是零,这样,对于2n个点的图,最后,2到2n与1的最短路径之和就可以了。
#include <bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define all(x) (x).begin(), (x).end()
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pa;
struct node {
int to, l;
node(int a, int b): to(a), l(b) {
}
};
const int N = 2005