样例已过,但交上去只有45分,WA on #3,#4,#5,#7,#8,不知道怎么错了。
代码:
#include<bits/stdc++.h>
using namespace std;
#define maxn 200
int dis[maxn][maxn];
int p,vis[maxn];
int cal(char x){
if(x>='a'&&x<='z'){
return x-'a'+1;
}
else{
vis[x-'A'+25]=1;
return x-'A'+25;
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>p;
for(int i=1;i<=150;i++){
for(int j=1;j<=150;j++){
dis[i][j]=0x3f3f3f3f;
}
dis[i][i]=0;
}
for(int i=1;i<=p;i++){
char u,v;
int w;
cin>>u>>v>>w;
int a=cal(u),b=cal(v);
//cout<<a<<" "<<b<<"\n";
dis[a][b]=min(dis[a][b],w);
dis[b][a]=min(dis[b][a],w);
}
for(int k=1;k<=150;k++){
for(int i=1;i<=150;i++){
for(int j=1;j<=150;j++){
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
}
}
}
int ans=0x7f7f7f7f;
char k;
for(int i=25;i<=49;i++){
if(vis[i]){
if(ans>dis[i][50]){
ans=dis[i][50];
k=i+40;
}
}
}
cout<<k<<" "<<ans;
return 0;
}