zoukankan      html  css  js  c++  java
  • hdu 1116 Play on Words

    http://acm.hdu.edu.cn/showproblem.php?pid=1116

    欧拉通路和欧拉回路

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <algorithm>
     4 #define maxn 1000
     5 using namespace std;
     6 
     7 int f[maxn],in[maxn],ou[maxn],a[maxn];
     8 bool vis[maxn];
     9 int n;
    10 char str[maxn];
    11 
    12 int find(int x)
    13 {
    14     if(x==f[x]) return x;
    15     return f[x]=find(f[x]);
    16 }
    17 
    18 void union1(int x,int y)
    19 {
    20     int fx=find(x);
    21     int fy=find(y);
    22     if(fx!=fy)
    23     f[fx]=fy;
    24 }
    25 
    26 void inti()
    27 {
    28     for(int i=0; i<26; i++)
    29     f[i]=i;
    30 }
    31 
    32 int main()
    33 {
    34     int t;
    35     scanf("%d",&t);
    36     while(t--)
    37     {
    38         scanf("%d",&n);
    39         inti();
    40         memset(in,0,sizeof(in));
    41         memset(ou,0,sizeof(ou));
    42         memset(vis,false,sizeof(vis));
    43         for(int i=0; i<n; i++)
    44         {
    45             scanf("%s",str);
    46             int k=strlen(str);
    47             ou[str[0]-'a']++;
    48             in[str[k-1]-'a']++;
    49             vis[str[0]-'a']=true;
    50             vis[str[k-1]-'a']=true;
    51             union1(str[0]-'a',str[k-1]-'a');
    52         }
    53         int ans=0;
    54         for(int i=0; i<26; i++)
    55         {
    56             if(vis[i]&&f[i]==i)
    57               ans++;
    58         }
    59         if(ans>1)
    60         {
    61             printf("The door cannot be opened.
    ");
    62             continue;
    63         }
    64         int m1=0,m2=0;
    65         bool flag=true;
    66         for(int j=0; j<26; j++)
    67         {
    68             if(vis[j]&&in[j]!=ou[j])
    69             {
    70                 if(in[j]-ou[j]==1)
    71                 {
    72                     m1++;
    73                 }
    74                 else if(ou[j]-in[j]==1)
    75                 {
    76                     m2++;
    77                 }
    78                 else flag=false;
    79             }
    80         }
    81         if(flag&&((m1==0&&m2==0)||(m1==1&&m2==1)))
    82         printf("Ordering is possible.
    ");
    83         else
    84         printf("The door cannot be opened.
    ");
    85     }
    86     return 0;
    87 }
    View Code
  • 相关阅读:
    HTML5 自动聚焦 属性
    c语言学习笔记(2)——预备知识
    java实现文件的上传和下载
    拓网超大文件上传组件
    java+下载+大文件断点续传
    word内容带样式粘贴到富文本编辑器
    php上传整个文件夹
    超大文件上传系统
    java+web中上传文件夹
    vue上传文件
  • 原文地址:https://www.cnblogs.com/fanminghui/p/3679205.html
Copyright © 2011-2022 走看看