#include <cstdio>
#include <map>
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
using namespace std;
const int N = 35;
const int INF = 0x3f3f3f3f;
int cnt;
int f[N][N];
map<string, int> strMap;
void floyd_warshall(int n);
int main()
{
int m, n, p;
int t;
string warehouse;
string s1, s2;
int size;
int cost;
#ifndef ONLINE_JUDGE
//freopen("uva_in.txt", "r", stdin);
fstream cin("uva_in.txt");
#endif
//scanf("%d", &t);
cout << "SHIPPING ROUTES OUTPUT" << endl << endl;;
cin >> t;
for (int k = 0; k < t; k++) {
cout << "DATA SET " << k + 1 << endl << endl;;
strMap.clear();
cnt = 0;
//scanf("%d%d%d", &m, &n, &p);
cin >> m >> n >> p;
for (int i = 0; i < m; i++) {
cin >> warehouse;
if (!strMap.count(warehouse))
strMap[warehouse] = cnt++;
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < m; j++) {
if (i == j) f[i][j] = 0;
else f[i][j] = INF;
}
}
for (int i = 0; i < n; i++) {
cin >> s1 >> s2;
int u = strMap[s1];
int v = strMap[s2];
f[u][v] = f[v][u] = 1;
}
floyd_warshall(m);
for (int i = 0; i < p; i++) {
cin >> size >> s1 >> s2;
int u = strMap[s1];
int v = strMap[s2];
if (f[u][v] == INF) {
cout << "NO SHIPMENT POSSIBLE" << endl;
} else {
cout << "$" << size * f[u][v] * 100 << endl;
}
}
cout << endl;
}
cout << "END OF OUTPUT" << endl;
return 0;
}
void floyd_warshall(int n)
{
for (int k = 0; k < n; k++) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
f[i][j] = min(f[i][j], f[i][k] + f[k][j]);
}
}
}
}
UVa383 - Shipping Routes
最新推荐文章于 2019-03-30 15:09:12 发布