- #include<cstdio>
- #include<algorithm>
- #include<iostream>
- #include<set>
- #include<queue>
- #include<cstring>
- #include<climits>
- #include<cmath>
- using namespace std;
- #define lld long long
- queue<char> p;
- vector< pair<char,int> > L[256]={};
- int Dis[256]={};
- #define foreach(i,a) for(typeof(a.begin()) i=a.begin();i!=a.end();++i)
- int main(){
- int n;
- cin>>n;
- memset(Dis,7,sizeof(Dis));//设置初值为很大的值//
- int Ans=INT_MAX;char Ansc;
- for(int i=1;i<=n;++i)
- {
- char f,t;int d;
- cin>>f>>t>>d;
- //新建路径//
- L[f].push_back( make_pair(t,d) );
- L[t].push_back( make_pair(f,d) );
- }
- p.push('Z');
- Dis['Z']=0;
- //SPFA//
- while(!p.empty())//队列非空//
- {
- foreach(i,L[p.front()])//遍历//
- {
- if(Dis[p.front()]+i->second<Dis[i->first])//判断Dis是否更优//
- {
- Dis[i->first]=Dis[p.front()]+i->second;//更新目标点并入队//
- p.push(i->first);
- if(isupper(i->first))//统计Ans//
- {
- if(Dis[i->first]<Ans)
- {
- Ans=Dis[i->first];
- Ansc=i->first;
- }
- }
- }
- }
- p.pop();
- }
- cout<<Ansc<<" "<<Ans;
- }