题意:

      给你n个单词,问你有没有一种排列方式可以所有单词的首部是相邻单词的尾部。


思路:

      这个题目还挺基础的,就是个欧拉的判定,首先对于每一个单词,我们把他抽象成边,每个单词两端的字母抽象成边的两个点,这样就是判断有向图是否可以组成欧拉回路或者欧拉路径了,如果能那么就能达到题目要求,如果不能就不行,还有一点就是在判定欧拉的时候记得先并查集一遍,防止图不连通。


提示下:在连通图下,有向图欧拉回路的判定是所有点的入度等于出度。

              在连通图下,有向图欧拉路径的判定是有一个点的入度比出度大一,有一个点的出度比入度大一,其余的入度等于出度。

               在连通图下,无向图的欧拉回路判定是所有点的度数为偶数。

               在连通图下,无向图的欧拉路径判定是有两个点的度数是奇数,其余的全是偶数。

              

#include<stdio.h>
#include<string.h>#define N 50int mer[N] ,mark[N];
int in[N] ,out[N];
char str[1100];int finds(int x)
{return x == mer[x] ? x : mer[x] = finds(mer[x]);
}int main ()
{int t ,n ,i;scanf("%d" ,&t);while(t--){scanf("%d" ,&n);for(i = 1 ;i <= 26 ;i ++)mer[i] = i,in[i] = out[i] = mark[i] = 0;while(n--){scanf("%s" ,str);int a = str[0] - 'a' + 1;int b = str[strlen(str) - 1] - 'a' + 1;out[a] ++ ,in[b] ++;mer[finds(a)] = finds(b);mark[a] = mark[b] = 1;}int s = 0;for(i = 1 ;i <= 26 ;i ++){if(!mark[i]) continue;if(mer[i] == i) s ++;}if(s != 1){puts("The door cannot be opened.");continue;}int s1 = 0,s2 = 0 ,s3 = 0 ,ss = 0;for(i = 1 ;i <= 26 ;i ++){if(!mark[i])continue;if(in[i] - out[i] == 1) s1 ++;if(in[i] - out[i] == -1) s2 ++;if(in[i] == out[i]) s3 ++;ss ++;}if(s1 + s2 + s3 == ss){if(!s1 && !s2 || s1 == 1 && s2 == 1)puts("Ordering is possible.");}else puts("The door cannot be opened.");}return 0;
}



 

POJ 1386 欧拉路的判定相关推荐

  1. POJ 1386(欧拉路)

    在进行题目分析前,先澄清一些概念,一些图论中很重要的概念然后给出思路: 节点度 英文:Node Degree 图论中: 节点度是指和该节点相关联的边的条数. 特别地,对于有向图, 节点的入度 是指进入 ...

  2. #1176 : 欧拉路·一(欧拉通路的判定)

    #1176 : 欧拉路·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho最近在玩一个解密类的游戏,他们需要控制角色在一片原始丛林里面探险,收集道具,并找 ...

  3. 图论--欧拉路,欧拉回路(小结)

    在题目中在慢慢细说概念 1.HDU - 3018 Ant Trip 题目大意:又N个村庄,M条道路.问须要走几次才干将全部的路遍历 解题思路:这题问的是有关欧拉路的判定 欧拉路就是每条边仅仅能走一次, ...

  4. POJ 1300 Door Man G++ 无向图欧拉路判定 背

    #include <iostream> #include <cstdio> #include <string> #include <cstring> u ...

  5. 海亮Day2:差分约束、拓扑排序、欧拉路

    海亮第二天,想着说预习一下的,可是昨天10h+都没有把那六道题打完,就打了四道,上午就讲完课了,还是延续昨天的博客,今天接着总结.. 欧拉路 开头就是特别经典的七桥问题,讲欧拉路一定会讲到的问题,也就 ...

  6. hihocder 1181 : 欧拉路·二

    因为相连的两个数字总是相同的,不妨我们只写一次,那么这个例子可以写成:3-2-4-3-5-1.6个数字刚好有5个间隙,每个间隙两边的数字由恰好对应了一块骨牌. 如果我们将每一个数字看作一个点,每一块骨 ...

  7. #1181 : 欧拉路·二(无向图的欧拉路)

    #1181 : 欧拉路·二 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在上一回中小Hi和小Ho控制着主角收集了分散在各个木桥上的道具,这些道具其实是一块一块骨牌. ...

  8. poj 1386 Play on Words(有向图欧拉回路)

    1 /* 2 题意:单词拼接,前一个单词的末尾字母和后一个单词的开头字母相同 3 思路:将一个单词的开头和末尾单词分别做两个点并建一条有向边!然后判断是否存在欧拉回路或者欧拉路 4 5 再次强调有向图 ...

  9. [hihoCoder] 第五十周: 欧拉路·二

    题目1 : 欧拉路·二 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在上一回中小Hi和小Ho控制着主角收集了分散在各个木桥上的道具,这些道具其实是一块一块骨牌. 主角 ...

最新文章

  1. 用CSS在博客园底部加上蒲公英动态效果的实现方法
  2. C语言程序设计有哪几种结构,第章c语言程序设计的三种基本结构.ppt
  3. Android-实现一个简单的自动翻译插件
  4. 常用正则表达 (转)
  5. 实战:基于 Spring 的应用配置如何迁移至阿里云应用配置管理 ACM
  6. Kotlin 5 控制流,返回和跳转
  7. mysql删除unionkey_MySQL索引如何优化?二十条铁则送给你
  8. 使用Builder模式创建复杂可选参数对象
  9. RStudio 的使用
  10. python 浅copy与深copy_python深copy与浅copy的区别
  11. 哨兵卫星及数据下载平台介绍
  12. QQ淘宝自动转链转发机器人MkStone京东淘宝转链助手
  13. 系统架构设计师论文范文
  14. 使用钉钉机器人实现运维告警信息自动发送(Python、Nagios、Shell)
  15. 分析5 中值定理与Taylor公式
  16. 本地计算机无法设置共享文件夹,win10系统下共享文件夹无法访问的解决方法
  17. 如何调试分布式系统:与微服务调试工具“Squash”创始人Idit Levine的对话
  18. Python之freshman07 面向对象编程jinjie
  19. java可变参数 map_Java第6期Collection、Map、迭代器、泛型、可变参数、集合工具类、集合结构、Debug...
  20. MATLAB人工神经网络的手写数字识别系统

热门文章

  1. 为什么百度首页的HTML源代码最后一行要多一行?浪费空间呀!
  2. 工作进度总结汇报01
  3. eclips 的pydev的debug
  4. 自动布局(autoLayout)演练2
  5. TypePerf收集服务器性能
  6. Makefile:160: recipe for target 'all' failed (Ubuntu 16.06 + Opencv3.2)解决办法
  7. 07. 分页写法小结
  8. 世界32条谣言,你被骗了多少?
  9. 《那些年啊,那些事——一个程序员的奋斗史》——74
  10. 共享一个对Reflector 反编译支持中文的修正FileGenerator文件