0
已解决
黄俊博
资深光能
资深光能
#include<iostream>
using namespace std;
struct edge{
int from,to;
int cost;
};
edge es[10010];
char s[10010];
int d[10010];
int P,n;
bool flag;
int k;
void bellmanford(int s)
{
for(int i=0;i<P;i++)d[i]=10000000;
d[s]=0;
int cnt=0;
while(true)
{
bool update=false;
cnt++;
for(int i=0;i<2*P;i++)
{
edge e=es[i];
if(d[e.from]!=10000000 && d[e.to]>d[e.from]+e.cost)
{
d[e.to]=d[e.from]+e.cost;
update=true;
}
}
if(!update)break;
if(cnt>=P)
{
flag=true;
break;
}
}
}
int main()
{
char a,b,e;
cin>>P;
for(int i=1;i<=P;i++)
{
cin>>a>>b>>b>>e;
if(a>='A' && a<='Z' && b>='a' && b<='z')
{
s[++n]=a;
es[k++]=(edge){a,b,e};
}
else if(a>='a' && a<='z' && b>='A' && b<='Z')
{
s[++n]=b;
es[k++]=(edge){a,b,e};
}
}
int minv=10000000;
char res;
for(int i=1;i<=n;i++)
{
bellmanford(s[i]);
if(d['Z']<minv)
{
minv=d['Z'];
res=s[i];
}
}
cout<<res<<" "<<minv;
return 0;
}