http://210.44.14.31/problem/show/1134
题目标题:Facebook
题目大意:给定一组关系,问最长的一条路径是几
bfs的题,没什么好说的,。
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
struct Node{
int x;
int d;
};
int re=0;
bool a[205][205]={0};
bool r[205]={0};
int x,y;
string n[205];
queue<Node> Q;
void bfs(int m){
r[m]=1;
Node aa;
aa.x=m;
aa.d=1;
Q.push(aa);
while(Q.size()!=0){
aa=Q.front();
Q.pop();
if(aa.d>re) re=aa.d;
for(int i=0;i<x;i++){
if(a[aa.x][i] && !r[i]){
r[i]=1;
Node bb;
bb.x=i;
bb.d=aa.d+1;
Q.push(bb);
}
}
}
}
int main()
{
cin>>x>>y;
int num=0;
for(int i=0;i<y;i++){
string s1,s2;
cin>>s1>>s2;
int sign1=-1,sign2=-1;
for(int j=0;j<num;j++){
if(s1==n[j]){
sign1=j;
break;
}
}
if(sign1==-1){
n[num]=s1;
sign1=num;
num++;
}
for(int j=0;j<num;j++){
if(s2==n[j]){
sign2=j;
break;
}
}
if(sign2==-1){
n[num]=s2;
sign2=num;
num++;
}
a[sign1][sign2]=1;
a[sign2][sign1]=1;
}
int sign=0;
for(int i=0;i<x;i++){
memset(r,false,sizeof(r));
bfs(i);
if(i==0){
for(int j=0;j<x;j++){
if(!r[j]){
sign=1;
break;
}
}
if(sign==1) break;
}
}
if(sign==1) cout<<"No";
else cout<<re-2;
}