#include<stdio.h>
#include<string>
#include<map>
using namespace std;
const int inf=999999999;
int n,c,m;
int tu[105][105];
char str[1005][100];
int cnt;
map<string,int>mat;
void Floyd()
{
int i,j,k;
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(tu[i][j]>tu[i][k]+tu[k][j])
tu[i][j]=tu[i][k]+tu[k][j];
}
int main()
{
int i,j,val,x,y,cas=1,sum,start;
char s1[100],s3[100];
char from,to;
while(~scanf("%d%d%d",&n,&c,&m),n+c+m)
{
sum=0;
mat.clear();
for(i=0;i<=n;i++)
for(j=0;j<=n;j++)
tu[i][j]=inf;
for(i=0;i<=c;i++)
scanf("%s",str[i]);
cnt=1;
for(i=0;i<m;i++)
{
scanf("%s %c-%d-%c %s",s1,&from,&val,&to,s3);
if(!mat[s1])
mat[s1]=cnt++;
if(!mat[s3])
mat[s3]=cnt++;
x=mat[s1];y=mat[s3];
if(from=='<'&&val<tu[y][x])
tu[y][x]=val;
if(to=='>'&&val<tu[x][y])
tu[x][y]=val;
}
Floyd();
start=mat[str[0]];
for(i=1;i<=c;i++)
sum+=tu[start][mat[str[i]]]+tu[mat[str[i]]][start];
printf("%d. %d\n",cas++,sum);
}
return 0;
}
hdu2923
最新推荐文章于 2019-06-07 19:26:36 发布