hdu2923

来源:互联网 发布:域名已被注册了怎么办 编辑:程序博客网 时间:2024/05/29 18:32
题意:求修理破车花费的最短时间。
注意:有可能几台破车同时在一个城市说好了n个城市,那么n个城市一定都会给有破车有可能就在公司所在的那个城市
#include<iostream>#include<cstdio>#include<map>#include<string.h>#define maxint 10000000using namespace std;int n,c,r;int ma[110][110];map<string,int>Map;void floyd(){    for(int k=1; k<=n; k++)        for(int i=1; i<=n; i++)            for(int j=1; j<=n; j++)                if(ma[i][j]>ma[i][k]+ma[k][j])                    ma[i][j]=ma[i][k]+ma[k][j];}int main(){    int t=0;    string ans[1100];    while(scanf("%d%d%d",&n,&c,&r)!=EOF)    {        if(n==0&&c==0&&r==0)         break;        t++;        Map.clear();        for(int i=1; i<=n; i++)            for(int j=1; j<=n; j++)            {                ma[i][j]=ma[j][i]=maxint;                if(i==j)                 ma[i][j]=0;            }        int m=0;        for(int i=0; i<=c; i++)        {            cin>>ans[i];            if(!Map[ans[i]])              Map[ans[i]]=++m;        }        string a,b,cc;        for(int i=0; i<r; i++)        {            int tem=0;            int f1=0,f2=0;            cin>>a>>b>>cc;            if(!Map[a])                Map[a]=++m;            if(!Map[cc])                Map[cc]=++m;            if(b[0]=='<')                f1=1;            if(b[b.size()-1]=='>')                f2=1;            for(int j=0; j<b.size(); j++)            {                if(b[j]>='0'&&b[j]<='9')                    tem=(b[j]-'0'+tem)*10;            }            if(f1==1&&tem/10<ma[Map[a]][Map[cc]])                ma[Map[a]][Map[cc]]=tem/10;            if(f2==1&&tem/10<ma[Map[cc]][Map[a]])                ma[Map[cc]][Map[a]]=tem/10;        }        floyd();        int sum=0,ii;        for(ii=1; ii<=c; ii++)        {            sum+=ma[Map[ans[0]]][Map[ans[ii]]];            sum+=ma[Map[ans[ii]]][Map[ans[0]]];        }        printf("%d. %d\n",t,sum);    }    return 0;}/*4 2 5NewTroy Midvale MetrodaleNewTroy   <-20-> MidvaleMidvale   --50-> BakerlineNewTroy    <-5-- BakerlineMetrodale <-30-> NewTroyMetrodale  --5-> Bakerline0 0 0*/