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("*****\n");
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\n",ans);
83     }
84 }

 

posted @ 2015-04-19 09:20  miao_a_miao  阅读(177)  评论(0编辑  收藏  举报