题意:判断一些单词能不能首尾连成一体

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <cstdio>
using namespace std;
int n,father[30],range[30],save[100010],in[30],out[30];
bool use[30];
char s[1010];
void add(int x)
{use[x]=true;father[x]=x;range[x]=0;
}
int Find(int x)
{int k=0;while(x!=father[x]){save[k++]=x;x=father[x];}for(int j=0; j<k; j++)father[save[j]]=x;return x;
}
void uni(int x,int y)
{int a=Find(x),b=Find(y);if(a!=b){if(range[a]<range[b]) father[a]=b;else{father[b]=a;if(range[a]==range[b]) range[a]++;}}
}
int main()
{freopen("in.txt","r",stdin);int t;scanf("%d",&t);while(t--){scanf("%d",&n);memset(use,false,sizeof(use));memset(father,0,sizeof(father));memset(range,0,sizeof(range));memset(in,0,sizeof(in));memset(out,0,sizeof(out));for(int i=1; i<=n; i++){scanf("%s",s);int l=strlen(s),x=s[0]-'a',y=s[l-1]-'a';if(use[x]==false) add(x);if(use[y]==false) add(y);in[x]++;out[y]++;uni(x,y);}int flag=0;for(int i=0; i<26; i++){if(use[i]==true&&Find(i)==i){flag++;}}if(flag>1) printf("The door cannot be opened.\n");else{int a=0,b=0,i;for(i=0;i<26;i++){if(use[i]&&in[i]!=out[i]){if(in[i]-out[i]==1) a++;else if(out[i]-in[i]==1) b++;else break;}}if(i<26) printf("The door cannot be opened.\n");else if(a+b==0||a==1&&b==1) printf("Ordering is possible.\n");else printf("The door cannot be opened.\n");}}return 0;
}

转载于:https://www.cnblogs.com/d-e-v-i-l/p/4783005.html

POJ1386 Play on Words相关推荐

  1. poj1386(判断一个有向图是否存在欧拉回路)

    1.欧拉回路:定义:经过图(有向图或无向图)中每条边一次且仅一次并且行遍图中每个顶点的回路( 闭合的欧拉路径,即一个环,保证每条边都通过且仅通过一次). 2.问题2:判断一个图是否有欧拉路径: (1) ...

  2. POJ-1386 Play on Words 有向图欧拉通路判定

    题意:给定一系列的单词,这些单词要使用类似与成语接龙的方式将他们连接起来,现在问是否存在这样一个通路. 解法:为什么这种题目刚看起来总是像那个什么哈密顿回路呢?欧拉回路主要解决对边的遍历问题,因此我们 ...

  3. poj1386 Paly onWords

    题目大意:给你很多单词,让你为这些单词排序,使这些单词每个单词首字母是上个单词的尾字母. 分析:对于每一个单词,我们只需要纪录下它的首字母和尾字母即可,然后单词接龙就变为了我们熟知的欧拉路径问题了.一 ...

  4. poj1386 Play on Words (欧拉回路)

    题 意: 思 路:先要判断连通(dfs遍历,若遍历到的节点数与输入的节点数相同说明通),这是前提条件.接着根据欧拉路径相关 定理判断. 学习点:欧拉路径 定理一. 有限图 G 是链或圈的充要条件是:G ...

  5. POJ - 2337 Catenyms 欧拉回路

    测试数据在这 http://acm.student.cs.uwaterloo.ca/~acm00/030125/data/ 首先在说这道题跟之前做的poj1386很像 但是多的就是要输入路径,并且是最 ...

  6. ACM题解系列之一:刘汝佳:《算法竞赛入门经典》(第2版)

    题是书中的题,解法参照了书中的解法,不少解法都做了简化和改进. 做程序,就要努力做到自己的程序是最好的! 第3章例题 POJ1488 UVA272 UVALive5381 TEX Quote[输入输出 ...

  7. 图论 —— 图的遍历

    [概述] 图的遍历问题是从图中某一顶点出发,系统地访问图中所有顶点,使每个顶点恰好被访问一次. 目前,图的遍历问题分为四类: 欧拉通路与欧拉回路问题:遍历完所有的边而不能有重复,即一笔画问题 中国邮递 ...

  8. ICPC程序设计题解书籍系列之九:罗勇军《算法竞赛入门到进阶》

    罗书<算法竞赛入门到进阶>题目一览 第1章 算法竞赛概述 HDU1000 HDU1089-HDU1096 A+B for Input-Output Practice (I)-(VIII)( ...

  9. Competitive Programming 3题解

    题目一览: Competitive Programming 3: The New Lower Bound of Programming Contests(1) Competitive Programm ...

最新文章

  1. python3装饰器的高级使用
  2. 信息收集工具exiftool获取图片中的exif信息
  3. JZOJ 5050. 【GDOI2017模拟一试4.11】颜色树
  4. kafka批量启动脚本
  5. 程序员编程需要多少个小时?
  6. c语言将数据写不入文件,求大神看看为什么不能将数据写入文件
  7. 2021年企业直播营销研究报告
  8. Struts2_HelloWorld_3
  9. Vue学习三:安装axios(实现http请求后端)
  10. 楚留香服务器维护时间,《一梦江湖》手游官方网站_《楚留香》现已全面升级重制-3月9日维护更新公告...
  11. dell系统重装后无法进入系统_戴尔电脑重装系统后开机出现NO Boot Device Found进不了系统...
  12. 【009】Excel宏编程相关封装模块(边框细线、边框粗线、列宽、行高)_002_#VBA
  13. 手机序列号和IMEI号的区别
  14. 王家林Spark 课程,蘑菇云,IMF真相
  15. 【华人学者风采】胡事民 清华大学
  16. 【QT网络编程】实现UDP协议通信
  17. 云服务器和虚拟主机的区别是什么
  18. word无法保存html文件,【修复】Word“文件发生错误”,无法保存文件
  19. 【AD】Altium Designer PCB文件的绘制(下篇:PCB布线和后续)
  20. VC MFC C++ IPControl CIPAddressCtrl IP输入控件使用

热门文章

  1. [导入]如何理解Return的返回值?
  2. 据说看完这21个故事的人,30岁前都成了亿万富翁。你是下一个吗?
  3. 通过WMI获得硬盘和CPU的物理序列号(VB.net)
  4. OpenCV中cvBlobsLib的编译与使用
  5. 【FFmpeg】ffmpeg工具源码分析(三):分配过滤器内存(宏GROW_ARRAY)详解
  6. 【Qt】在ubuntu14.04上安装Qt5.12(失败)
  7. 40无法u盘启动_制作好U盘启动盘,却无法引导启动,该怎么办?
  8. mysql数据库移植到另一台电脑,将mysql数据库从一台计算机复制到另一台计算机...
  9. postgres默认安装后有哪些表_Greenplum 行存、列存,堆表、AO表的原理和选择
  10. python mongodb orm_Django 通过 mongoengine 连接 MongoDB 进而使用orm进行CRUD