#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<iostream>
#include<vector>
#include<queue>
#include<map>
using namespace std;
#define inf 0x7f7f7f7f
#define N 1010
map<string,int>ma;
vector<int>g[N];
int dis[N][N];
queue<int> p;
bool vis[N];
void bfs(int st){
memset(vis,0,sizeof(vis));
while(!p.empty()) p.pop();
p.push(st);
vis[st]=1;
dis[st][st]=0;
while(!p.empty()){
int a=p.front();
p.pop();
for(int i=0;i<g[a].size();i++){
int b=g[a][i];
if(vis[b]) continue;
vis[b]=1;
dis[st][b]=dis[st][a]+1;
p.push(b);
}
}
}
int main(){
int n,m;
while(scanf("%d",&n)!=EOF&&n){
ma.clear();
string s;
for(int i=0;i<n;i++){
cin>>s;
ma[s]=i;
g[i].clear();
fill(dis[i],dis[i]+n,inf);
}
scanf("%d",&m);
string str1,str2;
int t1,t2;
for(int i=0;i<m;i++){
cin>>str1>>str2;
t1=ma[str1];
t2=ma[str2];
g[t1].push_back(t2);
g[t2].push_back(t1);
}
for(int i=0;i<n;i++){
bfs(i);
}
int maxn=0;
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
maxn=max(maxn,dis[i][j]);
}
}
if(maxn==inf) printf("-1\n");
else printf("%d\n",maxn);
}
return 0;
}
直接暴力,用vector存边,用bfs搜索,907ms水过了。
hdu_4460 Friend Chains bfs+vector
最新推荐文章于 2020-04-01 21:10:00 发布