#include <iostream>
#include <queue>
#include <vector>
using namespace std;
int inf = 2147483647;
struct edge{
int v, w;
};
vector<edge> mp[105];
struct node{
int v, w;
const bool operator<(const node& n) const {
return w > n.w;
}
};
int n = 60;
int m;
int d[105];
int vis[105];
char itoc(int & a)
{
if (a <= 26 && a >= 1)
return a + 'a' - 1;
if (a <= 52 && a >= 27)
return a + 'A' - 1-26;
}
int ctoi(char& c) {
if(c<='z'&&c>='a')
return c - 'a' + 1;
if(c<='Z'&&c>='A')
return c - 'A' + 1+26;
}
void dij() {
for(int i = 1; i <= n; i++){
d[i] = inf;
vis[i] =0;
}
d[52] = 0;
node t;
t.v = 52;
t.w = 0;
priority_queue<node> q;
q.push(t);
while (!q.empty()) {
t = q.top();
q.pop();
if(vis[t.v])
continue;
vis[t.v] = 1;
for (int i = 0; i < mp[t.v].size(); i++) {
int v = mp[t.v][i].v;
int w = mp[t.v][i].w;
if (d[v] > d[t.v] + w) {
d[v] = d[t.v] + w;
node tmp;
tmp.v = v;
tmp.w = d[v];
q.push(tmp);
}
}
}
}
int main() {
cin >> m;
for(int i = 1; i <= m; i++){
char a, b;
int w;
cin >> a >> b >> w;
edge tmp;
tmp.v = ctoi(a);
tmp.w = w;
mp[ctoi(b)].push_back(tmp);
}
dij();
int mi = inf;
int mn = 0;
for(int i = 27; i <= 51; i++){
if (mi > d[i]) {
mi = d[i];
mn = i;
}
}
cout << itoc(mn) << " " << mi;
return 0;
}
为什么67分?QAQ