Aizu0189 Convenient Location(多源最短路)
Posted Surprisez
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Aizu0189 Convenient Location(多源最短路)相关的知识,希望对你有一定的参考价值。
https://vjudge.net/problem/Aizu-0189
题意:求某一点到其他所有点的最短路径之和,输出该点与和。
注意Floyd可以求多源最短路径,而Dijkstra只能求单源。
1 #include<cstdio> 2 #include<cmath> 3 #include<iostream> 4 #include<algorithm> 5 #include<cstring> 6 #include<vector> 7 #include<map> 8 #include<set> 9 #define LL long long 10 #define maxn 100005 11 #define MOD 1e9+7 12 #define INF 0x3f3f3f3f 13 typedef long long ll; 14 using namespace std; 15 int n, D[110][110], x, y, z, maxm, mini; 16 int main() 17 { 18 while(cin >> n, n){ 19 maxm = -INF; 20 for(int i = 0; i < 10; i++){ 21 for(int j = 0; j < 10; j++){ 22 D[i][j] = INF; 23 } 24 } 25 for(int i = 0; i < n; i++){ 26 cin >> x >> y >> z; 27 D[x][y] = min(D[x][y], z); 28 D[y][x] = D[x][y]; 29 maxm = max(maxm, max(x, y)); 30 } 31 maxm++; 32 for(int i = 0; i < 10; i++){ 33 D[i][i] = 0; 34 } 35 for(int k = 0; k < maxm; k++){ 36 for(int i = 0; i < maxm; i++){ 37 for(int j = 0; j < maxm; j++){ 38 if(D[i][j] > D[i][k]+D[k][j]){ 39 D[i][j] = D[i][k]+D[k][j]; 40 } 41 } 42 } 43 } 44 mini = INF; 45 int loc = -1; 46 for(int i = 0; i < maxm; i++){ 47 int sum = 0; 48 for(int j = 0; j < maxm; j++){ 49 sum += D[i][j]; 50 } 51 if(mini > sum){ 52 mini = sum; 53 loc = i; 54 } 55 } 56 cout << loc << " " << mini << endl; 57 } 58 return 0; 59 }
以上是关于Aizu0189 Convenient Location(多源最短路)的主要内容,如果未能解决你的问题,请参考以下文章
Codefroces 939 C Convenient For Everybody