HDU 1811

通过一个单词来建立图形结构

将单词词头指向词尾作为一条边

图模型建立好后,从b出发,dfs到所有搜索的到的点

最后判断m是否被搜索到过即可

 

 1 #include <cstdio>

 2 #include <cstring>

 3 #include <iostream>

 4 using namespace std;

 5 char s[10005];

 6 int first[30] , k , vis[30];

 7 

 8 struct Edge{

 9     int y , next;

10 }e[100005];

11 

12 void add_edge(int x , int y)

13 {

14     e[k].y = y , e[k].next = first[x];

15     first[x] = k++;

16 }

17 

18 void dfs(int t)

19 {

20     vis[t] = 1;

21     for(int i = first[t] ; i!=-1 ; i=e[i].next){

22         int v = e[i].y;

23         if(!vis[v]) dfs(v);

24     }

25 }

26 int main()

27 {

28   //  freopen("a.in" , "r" , stdin);

29     k = 0;

30     memset(first , -1 , sizeof(first));

31     memset(vis , 0 , sizeof(vis));

32     while(scanf("%s" , s)!=EOF){

33         if(s[0] == '0'){

34             dfs(1);

35             if(vis[(int)('m'-'a')]) puts("Yes.");

36             else puts("No.");

37             k = 0;

38             memset(first , -1 , sizeof(first));

39             memset(vis , 0 , sizeof(vis));

40             continue;

41         };

42         int len = strlen(s);

43         int m = (int)(s[0] - 'a');

44         int n = (int)(s[len-1] - 'a');

45         add_edge(m , n);

46     }

47     return 0;

48 }

 

你可能感兴趣的:(HDU)