hdu2923+floyd

来源:互联网 发布:网络直播用户规模 编辑:程序博客网 时间:2024/06/05 11:41

也没啥好讲的。字符串模拟出图后直接floyd,水题+1。

#include<cstdio>#include<cstring>#include<map>#include<iostream>#include<algorithm>using namespace std;map<string,int> mmap;int n,c,r;int g[110][110];const int mmax=10000005;int main(){    int i,j,d[1100],dnum,k,numcas=0;    while(scanf("%d%d%d",&n,&c,&r)!=EOF)    {        if(n==0&&c==0&&r==0) break;        for(i=0;i<n;i++)            for(j=0;j<n;j++)            g[i][j]=mmax;            for(i=0;i<n;i++)                g[i][i]=0;        mmap.clear();        string str;        int cnt=0;        dnum=0;        for(i=0;i<c+1;i++)        {            cin>>str;            if(mmap.count(str)==0)                mmap[str]=cnt++;            if(i!=0)                d[dnum++]=mmap[str];        }        for(i=0;i<r;i++)        {            string city1,op,city2;            cin>>city1>>op>>city2;            if(mmap.count(city1)==0)                mmap[city1]=cnt++;            if(mmap.count(city2)==0)                mmap[city2]=cnt++;            int num1=mmap[city1];            int num2=mmap[city2];            int w=0;            for(j=2;;j++)            {                if(op.at(j)>='0'&&op.at(j)<='9')                    w=w*10+op.at(j)-'0';                else break;            }            if(op.at(0)=='<')            {                if(w<g[num2][num1])                    g[num2][num1]=w;            }            if(op.at(op.length()-1)=='>')            {                if(w<g[num1][num2])                    g[num1][num2]=w;            }        }        //以上构图        for(k=0;k<n;k++)            for(i=0;i<n;i++)              for(j=0;j<n;j++)              g[i][j]=min(g[i][j],g[i][k]+g[k][j]);        int ans=0;        for(i=0;i<c;i++)            ans=ans+g[0][d[i]]+g[d[i]][0];        printf("%d. %d\n",++numcas,ans);    }    return 0;}


0 0
原创粉丝点击