多源就是多个起点, 也就是随便给你两个点,让你求他们两个之间的距离。
例题:
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int a[N];
int n, m, k;
string s;
int dis[210][210];
void Floyd() {//时间复杂度是O(n^3)
//类似dp
for(int k = 1; k <= n; ++ k ) {
for(int i = 1; i <= n; ++ i ) {
for(int j = 1; j <= n; ++ j ) {
dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);//k起到一个过渡的作用
}
}
}
}
signed main() {
IOS;
cin >> n >> m >> k;
memset(dis, 0x3f, sizeof dis);
for(int i = 1; i <= n; ++ i )dis[i][i] = 0;//自己到自己是0的距离
for(int i = 1; i <= m; ++ i ) {
int x, y, z;
cin >> x >> y >> z;
dis[x][y] = min(dis[x][y], z);
}
Floyd();
while(k--) {
int x, y;
cin >> x >> y;
if(dis[x][y] > 0x3f3f3f3f / 2)cout << "impossible" << endl;
else cout << dis[x][y] << endl;
}
return 0;
}