zoukankan      html  css  js  c++  java
  • hdu 4460 第37届ACM/ICPC杭州赛区H题 STL+bfs

    题意:一些小伙伴之间有朋友关系,比如a和b是朋友,b和c是朋友,a和c不是朋友,则a和c之间存在朋友链,且大小为2,给出一些关系,求出这些关系中最大的链是多少?

    求最短路的最大距离

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<cmath>
     6 #include<queue>
     7 #include<map>
     8 using namespace std;
     9 #define MOD 1000000007
    10 const int INF=0x3f3f3f3f;
    11 const double eps=1e-5;
    12 #define cl(a) memset(a,0,sizeof(a))
    13 #define ts printf("*****
    ");
    14 const int MAXN=1005;
    15 int n,m,tt,dis[MAXN][MAXN];
    16 map<string,int> mp;
    17 vector<int> vc[MAXN];
    18 void bfs(int u)
    19 {
    20     queue<int> q;
    21     bool vis[MAXN];
    22     dis[u][u]=0;
    23     cl(vis);
    24     int now,next;
    25     q.push(u);
    26     vis[u]=1;
    27     while(!q.empty())
    28     {
    29         now=q.front();
    30         q.pop();
    31         int num=vc[now].size();
    32         for(int j=0;j<num;j++)
    33         {
    34             next=vc[now][j];
    35             if(vis[next])  continue;
    36             dis[u][next]=dis[u][now]+1;
    37             q.push(next);
    38             vis[next]=1;
    39         }
    40     }
    41 }
    42 int main()
    43 {
    44     int i,j,k;
    45     #ifndef ONLINE_JUDGE
    46     freopen("1.in","r",stdin);
    47     #endif
    48     while(scanf("%d",&n)!=EOF)
    49     {
    50         string s1,s2;
    51         cl(dis);
    52         if(n==0)    break;
    53         for(i=0;i<n;i++)
    54         {
    55             cin>>s1;
    56             mp[s1]=i;
    57         }
    58         for(int i=0;i<n;i++)
    59         {
    60             dis[i][i]=0;
    61             for(int j=i+1;j<n;j++)
    62                 dis[i][j]=dis[j][i]=INF;
    63         }
    64         scanf("%d",&m);
    65         for(i=0;i<n;i++)    vc[i].clear();
    66         while(m--)
    67         {
    68             cin>>s1>>s2;
    69             int t1=mp[s1];
    70             int t2=mp[s2];
    71             vc[t1].push_back(t2);
    72             vc[t2].push_back(t1);
    73         }
    74         for(i=0;i<n;i++)    bfs(i);
    75         int ans=0;
    76         for(i=0;i<n;i++)
    77              for(j=i+1;j<n;j++)
    78              {
    79                  ans=max(ans,dis[i][j]);
    80              }
    81         if(ans==INF)ans=-1;
    82         printf("%d
    ",ans);
    83     }
    84 }
  • 相关阅读:
    阿里云内网和公网NTP服务器和其他互联网基础服务时间同步服务器
    python3 tkinter
    未来的趋势发展 802.11v网络协议解析
    如何挑选好料酒?
    bootstrap
    结巴中文词频分析
    Covariance 协方差分析
    调整的R方_如何选择回归模型
    赤池信息量准则 ( Akaike information criterion)
    python蒙特卡洛脚本模拟—挑战者号爆炸概率
  • 原文地址:https://www.cnblogs.com/cnblogs321114287/p/4438639.html
Copyright © 2011-2022 走看看