• 变形课(DFS hdu 1181)


    变形课

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


    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
     
    第二次做这道题,开始超时了。
    提前预判要不要进行对该节点扩展,不要调用dfs然后判断改点是不是能扩展。就因为这原因超时的
    15ms
    
    
     1 /*******************************
     2 
     3 Date    : 2015-12-08 21:36:48
     4 Author  : WQJ (1225234825@qq.com)
     5 Link    : http://www.cnblogs.com/a1225234/
     6 Name     : hdu 1181
     7 
     8 ********************************/
     9 #include <iostream>
    10 #include <cstdio>
    11 #include <algorithm>
    12 #include <cmath>
    13 #include <cstring>
    14 #include <string>
    15 #include <set>
    16 #include <vector>
    17 #include <queue>
    18 #include <stack>
    19 #define LL long long
    20 using namespace std;
    21 int k;
    22 char ch[500][2];
    23 char a[50];
    24 bool flag;
    25 bool vis[500];
    26 void dfs(int n)
    27 {
    28     int i,j;
    29     vis[n]=1;
    30     if(ch[n][1]=='m')
    31     {
    32         flag=1;
    33         return;
    34     }
    35     for(i=0;i<k;i++)
    36     {
    37         if(ch[i][0]==ch[n][1])
    38         {
    39             if(vis[i])    continue;
    40             dfs(i);
    41             vis[i]=0;
    42             if(flag)    return;
    43         }
    44     }
    45     return;
    46 }
    47 int main()
    48 {    
    49     freopen("in.txt","r",stdin);
    50     int i,j;
    51     while(scanf("%s",ch[0])!=EOF)
    52     {
    53         int len=strlen(ch[0]);
    54         ch[0][1]=ch[0][len-1];
    55         for(i=1;;i++)
    56         {
    57             scanf("%s",a);
    58             if(a[0]=='0')
    59                 break;
    60             int len=strlen(a);
    61             ch[i][0]=a[0];
    62             ch[i][1]=a[len-1];
    63         }
    64         k=i+1;
    65         flag=0;
    66         memset(vis,0,sizeof(vis));
    67         for(i=0;i<k;i++)
    68         {
    69             if(ch[i][0]=='b')
    70             {
    71                 dfs(i);
    72                 vis[i]=0;
    73             }
    74         }
    75         printf("%s
    ",flag?"Yes.":"No.");
    76     }
    77     return 0;
    78 }
  • 相关阅读:
    平台总体技术架构
    防控激活
    dse测试说明
    设置内核tcp连接数
    删除topic的尝试
    用Jmeter进行接口压力测试的步骤
    性能测试
    配置文件的修改
    mysql 监控
    电子栅栏sql和接口查询
  • 原文地址:https://www.cnblogs.com/a1225234/p/5031229.html
Copyright © 2020-2023  润新知