Saturday, 21 March 2009

HOJ ( acm.hdu.edu.cn ) 1181





#include<iostream>
#include<string>
using namespace std;

class linked_alpha
{
public:
bool flag;//是否被访问过
bool others[26];
void reset()
{
for(int i=0;i<26;i++)
others[i]=0;
flag=false;
}
linked_alpha()
{
for(int i=0;i<26;i++)
others[i]=0;
flag=false;
}
};

class solution
{
linked_alpha map[26];
void add_link(char chf,char chb);
void setflag()
{
for(int i=0;i<26;i++)
{
map[i].flag=false;
}
}
public:
void add(char chf,char chb)
{
add_link(chf,chb);
setflag();
}
void reset()
{
for(int i=0;i<26;i++)
map[i].reset();
}
bool can(char from,char to)
{
return map[from-'a'].others[to-'a'];
}
};

void solution::add_link(char chf,char chb)
{
map[chf-'a'].others[chb-'a']=true;
map[chf-'a'].flag=true;
map[chb-'a'].flag=true;
// cerr<<" [debug]\t"<<chf<<" ---> "<<chb<<endl;
for(int i=0;i<26;i++)
{
if( map[chb-'a'].others[i]==true &&
map[i].flag==false )
{
add_link(chf,i+'a');
}
if( map[i].others[chf-'a']==true &&
map[i].flag==false &&
map[chf-'a'].flag==false )
{
add_link(i+'a',chb);
}
}
}

int main()
{
solution x;
string cham;
char f,b;
while (cin>>cham)
{
if(cham=="0")
{
cout<<(x.can('b','m')?"Yes.":"No.")<<endl;
x.reset();
continue;
}
f=cham[0];b=*(cham.end()-1);
x.add(f,b);
}
return 0;
}

No comments:

Post a Comment