HDU 4460 Friend Chains -多源最短路裸题

来源:互联网 发布:阿里云ecs默认用户名 编辑:程序博客网 时间:2024/06/07 22:42

题意:

求任意两点间最短路,输出其中最大的值

思路:

n次DJI,n次spfa。。。。

数据的问题吧。。。DJI交是TLE..

spfa才用了500ms....

#include <cstdio>#include <cmath>#include <cstring>#include <string>#include <algorithm>#include <iostream>#include <queue>#include <map>#include <vector> using namespace std; const int inf=2147483647;vector<int> tm[1005];map <string,int> uu;char tmp_char[15];char tmp_char2[15];int vis[1005];int dis[1005][1005];    int n,m;int main(){    void spfa(int );    int i,j;while(    scanf("%d",&n)!=EOF){    if (!n) break;    string ss;    uu.clear();         for (i=1;i<=n;i++)    {        scanf("%s",tmp_char);        ss=tmp_char;        uu.insert(make_pair(ss,i));    }    scanf("%d",&m);    for (i=1;i<=m;i++)    {        scanf("%s %s",tmp_char,tmp_char2);        ss=tmp_char;        int x=uu[tmp_char];        ss=tmp_char2;        int y=uu[tmp_char2];        tm[x].push_back(y);        tm[y].push_back(x);    }    for (i=1;i<=n;i++)    {        spfa(i);    }    int maxx=0;    for (i=1;i<=n;i++)    {        for (j=1;j<=n;j++)        {        if (dis[i][j]>maxx)        maxx=dis[i][j];        }    }    printf("%d\n",maxx==inf?-1:maxx);    for (i=1;i<=n;i++)    tm[i].clear();}    return 0;    }queue<int> q;void spfa(int start){    int st=start;    while(!q.empty()) q.pop();    int i;    for (i=1;i<=n;i++)    {        dis[st][i]=inf;        vis[i]=0;    }    dis[st][st]=0;    vis[st]=1;    q.push(st);    while(!q.empty())    {        int tt=q.front();        q.pop();        for (i=0;i<tm[tt].size();i++)        {        //    if (tm[tt][i]==0) continue;//道路不连通            int yy=tm[tt][i];            if (dis[st][tt]+1<dis[st][yy])            {                dis[st][yy]=dis[st][tt]+1;                if (!vis[yy])                {                    q.push(yy);                    vis[yy]=1;                }            }        }        vis[tt]=0;    }    }


0 0
原创粉丝点击