关闭

变形课

标签: 并查集
69人阅读 评论(0) 收藏 举报
分类:

变形课

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)
Total Submission(s): 21838    Accepted Submission(s): 7904


Problem Description
呃......变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个统一规律:如果咒语是以a开头b结尾的一个单词,那么它的作用就恰好是使A物体变成B物体. 
Harry已经将他所会的所有咒语都列成了一个表,他想让你帮忙计算一下他是否能完成老师的作业,将一个B(ball)变成一个M(Mouse),你知道,如果他自己不能完成的话,他就只好向Hermione请教,并且被迫听一大堆好好学习的道理.
 

Input
测试数据有多组。每组有多行,每行一个单词,仅包括小写字母,是Harry所会的所有咒语.数字0表示一组输入结束.
 

Output
如果Harry可以完成他的作业,就输出"Yes.",否则就输出"No."(不要忽略了句号)
 

Sample Input
so soon river goes them got moon begin big 0
 

Sample Output
Yes.
Hint
Hint
Harry 可以念这个咒语:"big-got-them".

#include<stdio.h> #include<string.h> int fa[27]; void init(){     for(int i=0;i<27;i++)     fa[i]=i; } int find(){     int t='m'-'a';      while(t!=fa[t])     {            if(fa[t]=='b'-'a')         return 1;                  t=fa[t];     }     return 0; } int main(){     char s[100];          while(scanf("%s",s)!=EOF){         init();         int  l=strlen(s);                  if(s[0]!=s[l-1])                      fa[s[l-1]-'a']=s[0]-'a';                          while(scanf("%s",s)!=EOF&&strcmp(s,"0")!=0){                          l=strlen(s);                          if(s[0]!=s[l-1])             fa[s[l-1]-'a']=s[0]-'a';                                                 }                  if(find())         printf("Yes.\n");         else         printf("No.\n");     }          return 0;      }

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:20005次
    • 积分:1877
    • 等级:
    • 排名:千里之外
    • 原创:164篇
    • 转载:86篇
    • 译文:0篇
    • 评论:3条
    友情链接