HDU 2112 HDU Today

来源:互联网 发布:济南淘宝代运营公司 编辑:程序博客网 时间:2024/06/04 19:44

//题意就不说了,题也是个水题,但是值得注意的就是要清空//

#include<stdio.h>#include<string.h>#include<string>#include<algorithm>using namespace std;#include<map>map<string,int>a;const int inf=1<<29;char s1[151],s2[151];char r1[151],r2[151];int w[155][155],vis[155],d[155];int n,m,p;void dij(int st,int ed){    int i,j;    memset(vis,0,sizeof(vis));    for(i=st; i<=ed; i++)    {        d[i]=w[st][i];    }    d[st]=0;    vis[st]=1;    for(i=st; i<=ed; i++)    {        int now=inf,x;        for(j=st; j<=ed; j++)        {            if(!vis[j]&&d[j]<now)            {                now=d[j];                x=j;            }        }        vis[x]=1;        for(j=st; j<=ed; j++)        {            if(!vis[j]&&d[j]>d[x]+w[x][j])            {                d[j]=d[x]+w[x][j];            }        }    }}int main(){    while(scanf("%d",&n)!=EOF&&n!=-1)    {        int i,j;        for(i=1; i<=152; i++)        {            for(j=1; j<=152; j++)            {                if(i==j)                {                    w[i][j]=0;                }                else                {                    w[i][j]=inf;                }            }        }        scanf("%s%s",r1,r2);        int ok=1;        if(strcmp(r1,r2)==0)        {            ok=0;        }        a.clear();//必须清空,不清空,导致map里面的东西越来越多,查的越来越慢        a[r1]=1,a[r2]=2;        m=3;        for(i=0; i<n; i++)        {            scanf("%s%s%d",s1,s2,&p);            if(!a[s1])                a[s1]=m++;            if(!a[s2])                a[s2]=m++;            if(p<w[a[s1]][a[s2]])                w[a[s1]][a[s2]]=w[a[s2]][a[s1]]=p;        }        if(!ok)        {            printf("0\n");        }        else        {            dij(1,m);            if(d[a[r2]]==inf)            {                printf("-1\n");            }            else            {                printf("%d\n",d[a[r2]]);            }        }    }    return 0;}


0 0
原创粉丝点击