题目给出一个Z点表示终点,然后给各种点之间的距离,大写的点有牛,小写的点没牛,每只牛的速度一样,问哪只牛最快到达终点,直接从Z跑一遍最短路然后找即可。
/*
ID: 13227851
PROG: comehome
LANG: C++
*/
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stack>
#include <map>
#include <vector>
#include <algorithm>
#include <set>
#include <queue>
#include <math.h>
using namespace std;
int map1[150][150];
int dist[150];
int q1[150];
int main(){
freopen("comehome.in","r",stdin);
freopen("comehome.out","w",stdout);
int i,j,f1,f2,f3,l1,t1,t2,t3,t4,l2,l3;
int m,r;
int T,n;
memset(q1,0,sizeof(q1));
memset(map1,-1,sizeof(map1));
cin >> n;
char a,b,c;
for(i=1;i<=n;i++){
cin >> a >> b >> t1;
if(a>='A'&&a<='Z')q1[a]=1;
if(b>='A'&&b<='Z')q1[b]=1;
if(map1[a][b]==-1||map1[a][b]>t1){
map1[a][b]=t1;
map1[b][a]=t1;
}
}
for(i=1;i<=125;i++)
dist[i]=1e9+7;
dist[90]=0;
queue<int>qq;
qq.push(90);
while(!qq.empty()){
t1=qq.front();qq.pop();
for(i=65;i<=122;i++){
if(map1[t1][i]!=-1&&map1[t1][i]+dist[t1]<dist[i]){
dist[i]=dist[t1]+map1[t1][i];
qq.push(i);
}
}
}
int min1=1e9+7;
for(i=65;i<=122;i++){
if(q1[i]!=0&&i!=90&&dist[i]<min1){
min1=dist[i];b=i;
}
}
cout << b << " " <<min1 << endl;
return 0;
}