您的位置:首页 > 其它

【BFS】ural 1837

2011-08-22 00:12 495 查看
贡献了一次CE!timus竟然不认<string.h>!

#include <vector>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <string>
#include <deque>
#include <stack>
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <limits.h>
#include <time.h>
#include <string.h>

using namespace std;

int lowbit(int t){return t&(-t);}
int countbit(int t){return (t==0)?0:(1+countbit(t&(t-1)));}
int gcd(int a,int b){return (b==0)?a:gcd(b,a%b);}
#define LL long long
#define PI acos(-1.0)
#define N  301
#define MAX INT_MAX
#define MIN INT_MIN
#define eps 1e-8
#define FRE freopen("a.txt","r",stdin)
struct node{
string str;
int id;
bool vis;
}name
;
vector<int> v
;
int cnt;
int gao(string a){
int i,j;
for(i=0;i<cnt;i++)
if(name[i].str==a)
return i;
name[cnt++].str=a;
return cnt-1;
}
bool cmp(node a,node b){
return a.str<b.str;
}
void bfs(int k){
queue<int> q;
q.push(k);
int i,j;
name[k].id=0;
name[k].vis=1;
while(!q.empty()){
int x=q.front();
q.pop();
for(i=0;i<v[x].size();i++){
int y=v[x][i];
if(name[y].vis==0)
{
q.push(y);
name[y].vis=1;
name[y].id=name[x].id+1;
}
}
}
}

int main(){
int n;
while(scanf("%d",&n)!=EOF){
int i,j,k;
for(i=0;i<=3*n;i++){
v[i].clear();
name[i].id=-1;
name[i].vis=0;
}
cnt=0;
for(i=1;i<=n;i++){
string a,b,c;
cin>>a>>b>>c;
int id1=gao(a);
int id2=gao(b);
int id3=gao(c);
v[id1].push_back(id2);
v[id1].push_back(id3);
v[id2].push_back(id3);
v[id2].push_back(id1);
v[id3].push_back(id1);
v[id3].push_back(id2);
}
for(i=0;i<cnt;i++)
if(name[i].str=="Isenbaev"){
bfs(i);
break;
}
sort(name,name+cnt,cmp);
for(i=0;i<cnt;i++){
cout<<name[i].str<<" ";
if(name[i].id==-1)puts("undefined");
else
cout<<name[i].id<<endl;
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: