A27687. 奶牛回家(home)现在是晚饭时间,但是奶牛们在外面分散的牧场中。这时约翰按响了电铃,所以它们开始向谷仓走去。你需要指出哪只奶牛会最先到达谷仓(在给出的测试数据中,总会有且只有一只最快的奶牛)。在晚餐前,每只奶牛都在她自己的牧场上,有些牧场上可能没有奶牛。每个牧场由一条条道路和一个或多个牧场连接(可能包括自己),两个牧场(可能是字母相同的)之间会有超过一条道路相连。因为至少有一个牧场和谷仓之间有…
填空题
中等
知识点
题目描述
奶牛回家(home)
现在是晚饭时间,但是奶牛们在外面分散的牧场中。
这时约翰按响了电铃,所以它们开始向谷仓走去。你需要指出哪只奶牛会最先到达谷仓(在给出的测试数据中,总会有且只有一只最快的奶牛)。在晚餐前,每只奶牛都在她自己的牧场上,有些牧场上可能没有奶牛。
每个牧场由一条条道路和一个或多个牧场连接(可能包括自己),两个牧场(可能是字母相同的)之间会有超过一条道路相连。因为至少有一个牧场和谷仓之间有道路连接,所以所有的奶牛最后都能到达谷仓,并且奶牛总是走最短的路径。奶牛能向着任意一方向前进,并且她们以相同的速度前进。牧场被标记为和,在用大写字母表示的牧场中有一只奶牛,小写字母中则没有。谷仓的标记是Z,一开始并没有奶牛在谷仓中。
注意:标记中大写字母和小写字母不是同一个牧场。
Input
第一行一个整数,表示连接牧场(谷仓)的道路的数目。
接下来P行,每行用空格分开的两个字母和一个正整数,表示被道路连接牧场的标号和道路的长度(道路长度均不超过)
Output
输出一行包含二个整数 ,分别为:最先到达谷仓的奶牛所在的牧场的标号和这只奶牛走过的路径的长度。
Samples
输入数据 1
5
A d 6
B d 3
C e 9
d Z 8
e Z 3
输出数据 1
B 11
样例1解释

样例构成的图如上所示,只有A,B,C点有牛,这几点的牛到谷仓Z的距离分别为14、11、12,所以最快到达谷仓的牛为B,路径为B-d-Z,距离是11。
数据范围

参考答案
#include <iostream>
using namespace std;
int a[200][200];
int main() {
int p;
cin >> p;
char x, y;
int w;
for (int i = 0; i < 200; ++i) {
for (int j = 0; j < 200; ++j) {
a[i][j] = 99999999;
}
}
for (int i = 0; i < p; ++i) {
cin >> x >> y >> w;
if (w < a[x][y]) {
a[(int)x][int(y)] = w;
a[(int)y][int(x)] = w;
continue;
}
}
for (int k = 65; k < 200 ; ++k) {
for (int i = 65; i < 200; ++i) {
for (int j = 65; j < 200; ++j) {
if (a[i][j] >= a[i][k] + a[k][j]) {
a[i][j] = a[i][k] + a[k][j];
}
}
}
}
char ansc;
int ans = 99999999;
for (int i = 65; i < 90; ++i) {
if (a[i][90] <= ans) {
ans = min(a[i][90], ans);
ansc = char(i);
}
}
cout << ansc << " " << ans;
return 0;
}
上一题
下一题