zoukankan      html  css  js  c++  java
  • UVa-10129 Play on Words

      1 #include <bits/stdc++.h>
      2 
      3 const int maxn = 28;
      4 using namespace std;
      5 
      6 int G[maxn][maxn];
      7 int tmpG[maxn][maxn];
      8 int known[maxn];
      9 void DFS(int s)
     10 {
     11     for(int u=0; u<maxn; u++)
     12     {
     13         if(!known[u]&&tmpG[s][u])
     14         {
     15             known[u] = 1;
     16             DFS(u);
     17         }
     18     }
     19     return ;
     20 }
     21 
     22 bool bing(int vnum)
     23 {
     24     int count = 0;
     25     DFS(0);
     26     for(int i = 0;i < maxn;i ++)
     27     {
     28         if(known[i]>0)
     29             count ++;
     30     }
     31     return count==vnum;
     32 }
     33 
     34 int main()
     35 {
     36     int T;
     37     cin >> T;
     38     while(T --)
     39     {
     40         memset(G,0,sizeof(G));
     41         memset(tmpG,0,sizeof(tmpG));
     42         memset(known,0,sizeof(known));
     43         int vnum = 0;
     44         int v[maxn] {0};
     45         int n;
     46         cin >> n;
     47 
     48         int out[maxn] {0};
     49         int in[maxn] {0};
     50 
     51         vector<int> diff;
     52         while(n --)
     53         {
     54             string tmp;
     55             cin >> tmp;
     56             G[tmp[0]-'a'][tmp[tmp.size()-1]-'a'] ++;
     57             tmpG[tmp[0]-'a'][tmp[tmp.size()-1]-'a'] = 1;
     58             tmpG[tmp[tmp.size()-1]-'a'][tmp[0]-'a'] = 1;
     59             if(v[tmp[0]-'a']==0)
     60             {
     61                 v[tmp[0]-'a'] = 1;
     62                 vnum ++;
     63             }
     64             if(v[tmp[tmp.size()-1]-'a']==0)
     65             {
     66                 v[tmp[tmp.size()-1]-'a'] = 1;
     67                 vnum ++;
     68             }
     69         }
     70 
     71         if(!bing(vnum))
     72         {
     73             cout << "The door cannot be opened." << endl;
     74             continue;
     75         }
     76 
     77         for(int i = 0; i < maxn; i ++)
     78         {
     79             int sum = 0;
     80             for(int j = 0; j < maxn; j ++)
     81             {
     82                 sum += G[i][j];
     83             }
     84             in[i] = sum;
     85         }
     86 
     87         for(int i = 0; i < maxn; i ++)
     88         {
     89             int sum = 0;
     90             for(int j = 0; j < maxn; j ++)
     91             {
     92                 sum += G[j][i];
     93             }
     94             out[i] = sum;
     95         }
     96 
     97         for(int i = 0; i < maxn; i ++)
     98         {
     99             if(in[i]!=out[i])
    100                 diff.push_back(in[i]-out[i]);
    101         }
    102 
    103         if(diff.size()==0)
    104         {
    105             cout << "Ordering is possible." << endl;
    106             continue;
    107         }
    108         else if(diff.size()==2)
    109         {
    110             if(diff[0]==-1&&diff[1]==1||diff[0]==1&&diff[1]==-1)
    111             {
    112                 cout << "Ordering is possible." << endl;
    113                 continue;
    114             }
    115         }
    116         cout << "The door cannot be opened." << endl;
    117     }
    118     return 0;
    119 }
  • 相关阅读:
    线程应用示例
    Microsoft Visual Studio 2005 BETA2最新资源大杂烩
    135,139,445端口的关闭方法
    开源软件新时代 55个经典开源Windows工具
    图书商城项目总论
    无处不在的XML
    ADO.NET实例教学一
    递归
    手写代码生成器
    数据库的应用详解三
  • 原文地址:https://www.cnblogs.com/Asurudo/p/9991256.html
Copyright © 2011-2022 走看看