Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)
Total Submission(s): 11226 Accepted Submission(s): 4158
Harry已经将他所会的所有咒语都列成了一个表,他想让你帮忙计算一下他是否能完成老师的作业,将一个B(ball)变成一个M(Mouse),你知道,如果他自己不能完成的话,他就只好向Hermione请教,并且被迫听一大堆好好学习的道理.
using namespace std;
char A[1000000000][2];
int finis=0;
int vis[1000000000];
char end[5]="No.";
void Dfs(char tail,int num)
{
if(tail=='m')
{
strcpy(end,"Yes.");
finis=1;
return;
}
vis[num]=0;
for(int i=0;A[i][0]!='0';i++)
{
if(vis[i] && A[i][0]==tail)
{
Dfs(A[i][1],i);
if(finis) return;
vis[i]=1;
}
}
}
void main()
{
while(1)
{
finis=0;
strcpy(end,"No.");
char temp[100];
int i=0;
while(1)
{
cin>>temp;
vis[i]=1;
A[i][0]='0';
if(temp[0]=='0') break;
A[i][0]=temp[0];
for(int j=0;temp[j]!='\0';j++) ;
j--;
A[i][1]=temp[j];
i++;
}
for(i=0;A[i][0]!='0';i++)
if(A[i][0]=='b')
{
Dfs(A[i][1],i);
if(finis)
break;
}
cout<<end<<endl;
}
}
using namespace std;
int A[26][26];
int vis[26][26];
int finis;
void Dfs(int tail)
{
if(finis)
return;
if(tail=12)
{
finis=1;
return;
}
for(int i=0;i<26;i++)
if(A[tail][i] && vis[tail][i])
{
vis[tail][i]=0;
Dfs(i);
vis[tail][i]=1;
}
}
void main()
{
char temp[100];
while(1)
{
finis=0;
for(int i=0;i<26;i++)
for(int j=0;j<26;j++)
{
A[i][j]=0;
vis[i][j]=1;
}
while(cin>>temp)
{
if(temp[0]=='0')
break;
int vt,vi;
for(i=0;temp[i]!='\0';i++) ;
i--;
vt=temp[0]-'a';
vi=temp[i]-'a';
A[vt][vi]=1;
}
for(i=0;i<26;i++)
if(A[1][i])
{
vis[1][i]=0;
Dfs(i);
vis[1][i]=1;
if(finis) break;
}
if(finis)
cout<<"Yes."<<endl;
else
cout<<"No."<<endl;
}
}
#include<string>
using namespace std;
char a[26][26];
int test[26];//
int Dfs(int h)
{
if(h==12)
{
cout<<"YES."<<endl;
return 1;
}
test[h]=0;
for(int i=0;i<26;i++)
{
int temp=0;
if(a[h][i] && test[i])
{
temp=Dfs(i);
if(temp)
return 1;
}
}
return 0;
}
void main()
{
string temp;
while(1)
{
int start,tail;
for(int i=0;i<26;i++)
{
test[i]=1;
for(int j=0;j<26;j++)
a[i][j]=0;
}
while(scanf("%s",&temp))
{
if(temp[0]=='0')
break;
start=(int)temp[0]-97;
tail=(int)temp[temp.length()-1]-97;
if(start==tail) continue;
a[start][tail]=1;
}
int temp=0;
if(a[1][12])
temp=Dfs(12);
else
for(i=0;i<26;i++)
{
if(a[1][i])
{
temp=Dfs(i);
test[1]=0;
}
if(temp) break;
}
if(temp==0)
cout<<"No."<<endl;
}
}
#include<iostream>
#include<string>
using namespace std;
char a[26][26];
int test[26];
int Dfs(int h)
{
if(h==12)
{
cout<<"YES."<<endl;
return 1;
}
test[h]=0;
for(int i=0;i<26;i++)
{
int temp=0;
if(a[h][i] && test[i])
{
temp=Dfs(i);
if(temp)
return 1;
}
}
return 0;
}
void main()
{
string temp;
while(1)
{
int start,tail;
for(int i=0;i<26;i++)
{
//test[i]=1;
for(int j=0;j<26;j++)
a[i][j]=0;
}
while(cin>>temp)
{
if(temp[0]=='0')
break;
start=(int)temp[0]-97;
tail=(int)temp[temp.length()-1]-97;
if(start==tail) continue;
a[start][tail]=1;
}
for(i=0;i<26;i++)
for(int j=0;j<26;j++)
if(a[j][i])
for(int k=0;k<26;k++)
if(a[i][k]) a[j][k]=1;
/* int temp=0;
if(a[1][12])
temp=Dfs(12);
else
for(i=0;i<26;i++)
{
if(a[1][i])
{
temp=Dfs(i);
test[1]=0;
}
if(temp) break;
}
if(temp==0)
cout<<"No."<<endl;*/
if(a[1][12])
cout<<"YES."<<endl;
else
cout<<"No."<<endl;
}
}
()
#include<stdio.h>
#include<string>
char a[26][26];
void main()
{
char temp[1001];
int start,tail;
int i,j,k;
while(1)
{
memset(a,0,sizeof(a));
while(scanf("%s",temp))
{
if(temp[0]=='0')
break;
start=(int)temp[0]-97;
tail=(int)temp[strlen(temp)-1]-97;
if(start==tail) continue;
a[start][tail]=1;
}
for(i=0;i<26;i++)
for(j=0;j<26;j++)
if(a[j][i])
for(k=0;k<26;k++)
if(a[i][k]) a[j][k]=1;
if(a[1][12])
printf("Yes.\n");
else
printf("No.\n");
}
}