题意:给你一些字符串,这些字符串可以首位相接(末位置如果和另一个字符串的首位置相同的话就可以相连) 。然后问你是否可以全部连起来。

思路:就是取出每个字符串的首尾位置,然后求出出度和入度,根据有向欧拉通路的性质,可以求出是否可以组成欧拉通路 。

当然还得考虑一下这个图是否是连通图,这里可以用并查集记录边的集合。最后判断是否是一个连通图。

欧拉通路水题。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define clr(a) memset(a , 0 , sizeof(a) )
using namespace std ; char a[1111] ;
struct kdq{
int s, e ;
}al[111111] ;
int in[30] ,out[30] ;
bool vis[30] ; int fa[30] ;
int find(int x){
return fa[x] == x ? x : fa[x] = find(fa[x]) ;
} void Union(int a, int b){
a = find(a) ;
b = find(b) ;
if(a == b)return ;
if(a < b)fa[b] = a ;
else fa[a] = b ;
} void init(){
for (int i = 0 ; i <= 26; i ++ )fa[i] = i ;
clr(in) ;
clr(out) ;
clr(vis) ;
} int main(){
int T ;
cin >> T ;
while( T -- ){
int n ;
cin >> n ;
init() ; for (int i = 1 ; i <= n ; i ++ ){
scanf("%s",a) ;
int l = strlen(a) ;
al[i].s = a[0] - 'a';
al[i].e = a[l - 1] - 'a';
in[a[0] - 'a'] ++ ;
out[a[l - 1] - 'a'] ++ ;
vis[a[0] - 'a'] = 1 ;
vis[a[l - 1] - 'a'] = 1 ;
}
for (int i = 1 ; i <= n ; i ++ ){
int u = al[i].s ;
int v = al[i].e ;
Union(u , v) ;
}
int jihe = -1 ;
bool flag = 0 ;
for (int i = 0 ; i < 26 ; i ++ ){
if(!vis[i])continue ;
if(jihe == -1){
jihe = find(i) ;
}
else if(find(i) != jihe){
flag = 1 ;
break ;
}
}
int num = 0 ;
for (int i = 0 ; i < 26 ;i ++ ){
if(!vis[i])continue ;
if(abs(in[i] - out[i]) >= 2){
flag = 1 ;
break ;
}
else if(abs(in[i] - out[i]) == 1){
num ++ ;
}
}
if(flag){
puts("The door cannot be opened.") ;
}else
if(num == 0 || num == 2 ){
puts("Ordering is possible.") ;
}else {
puts("The door cannot be opened.") ;
}
}
return 0 ;
}

最新文章

  1. java IO流 Zip文件操作
  2. hdu5033 Building (单调栈+)
  3. MongoDB学习笔记四:索引
  4. linux下查找某个目录下包含某个字符串的文件
  5. 配置tomcat,java运行环境
  6. logback日志文件需要注意点
  7. python request的运用
  8. POJ 1840 Brainman(逆序对数)
  9. Entity Framework入门教程:什么是Entity Framework
  10. 阿里云ecs遭到频繁的ddos攻击始末
  11. [Swift]LeetCode731. 我的日程安排表 II | My Calendar II
  12. mysql 开发进阶篇系列 46 物理备份与恢复( xtrabackup的 选项说明,增加备份用户,完全备份案例)
  13. jQuery-动画点击淡化消失
  14. MVC中修改Table值
  15. POJ 1330 Nearest Common Ancestors(LCA Tarjan算法)
  16. 微信小程序FAQ
  17. HDU2577 How to Type 2016-09-11 14:05 29人阅读 评论(0) 收藏
  18. leetcode之Maximal Square
  19. Python :集合类型(set)
  20. [LeetCode 题解]: Triangle

热门文章

  1. 再谈Cookies欺骗
  2. div中的内容居中
  3. CentOS目录结构详解
  4. java: cannot execute binary file
  5. oracle 语句
  6. MFC 堆栈溢出 test dword ptr [eax],eax ; probe page.
  7. mobx react
  8. InnoDB概览
  9. C#操作Excel开发报表系列整理(转)
  10. seo初学