题意:

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


思路:

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


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

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

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

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

              

#include<stdio.h>
#include<string.h> #define N 50 int 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. hiho48 : 欧拉路·一

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

  2. hiho一下 第四十九周 欧拉路&#183;一

    [题目链接]:click here~~ 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描写叙述 小Hi和小Ho近期在玩一个解密类的游戏.他们须要控制角色在一片原始丛林里面探险 ...

  3. hiho一下 第四十九周 题目1 : 欧拉路·一【无向图 欧拉路问题】

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

  4. 【HIHOCODER 1176】 欧拉路·一

    描述 小Hi和小Ho最近在玩一个解密类的游戏,他们需要控制角色在一片原始丛林里面探险,收集道具,并找到最后的宝藏.现在他们控制的角色来到了一个很大的湖边.湖上有N个小岛(编号1..N),以及连接小岛的 ...

  5. POJ 1637 Sightseeing tour (混合图欧拉路判定)

    Sightseeing tour Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 6986   Accepted: 2901 ...

  6. poj 1386 Play on Words(有向图欧拉路+并查集)

    题目链接:http://poj.org/problem?id=1386 思路分析:该问题要求判断单词是否能连接成一条直线,转换为图论问题:将单词的首字母和尾字母看做一个点,每个单词描述了一条从首字母指 ...

  7. poj 1780 code(欧拉路)

    /* 对于n为密码想要序列最短 那么 1234 2345 这两个一定挨着 就是说 前一个的后n-1位是后一个的前n-1位 假设n==3 我们用0-99作为点的编号建图 然后每个点连出去10条边 两个相 ...

  8. POJ 2513 - Colored Sticks - [欧拉路][图的连通性][字典树]

    题目链接: http://poj.org/problem?id=2513 http://bailian.openjudge.cn/practice/2513?lang=en_US Time Limit ...

  9. poj 1637 Sightseeing tour【最大流+欧拉路】

    参考:https://www.cnblogs.com/kuangbin/p/3537525.html 这篇讲的挺好的 首先分清欧拉路和欧拉环: 欧拉路:图中经过每条边一次且仅一次的路径,要求只有两个点 ...

随机推荐

  1. ArrayList源码分析笔记

    ArrayList源码分析笔记 先贴出ArrayList一些属性 public class ArrayList<E> extends AbstractList<E> imple ...

  2. Python数据格式:%s字符串,%d整型,%f浮点型

    格式化符% name="Tom" age=int(input("age")) pt2="%s你的年龄是%d"%(name,age) prin ...

  3. JSP实验报告

  4. 攻防世界 reverse hackme

    hackme XCTF 3rd-GCTF-2017 __int64 __fastcall sub_400F8E(__int64 a1, __int64 a2) { char input[136]; / ...

  5. 软件漏洞--Hello-Shellcode

    软件漏洞--Hello-Shellcode 使用上一次的栈溢出的漏洞软件 可以直接通过栈溢出来修改返回值,或者要跳转的函数地址 实现一个ShellCode来跳转自己的代码 源bug软件代码 #defi ...

  6. Git 在解决冲突的时候文件覆盖

    更新代码导致被还原或覆盖的场景:1.触发冲突的必要条件是修改同一个文件且修改的位置非常近,否则Git会自动合并其内容避免更新代码导致被还原或覆盖的解决方案1.少修改的地方(生产环境.公网测试环境):推 ...

  7. Web 前端 - 浅谈外部手动控制 Promise 状态

    前言 当有多个共享资源.协同操作的时候,往往需要根据动态亦或是复杂的条件以控制和调用程序逻辑. 还是那句话,懂的人自然懂,不懂的人也搜不到这个随笔. 设计 PendingPromise<T> ...

  8. Java进阶专题(二十八) Service Mesh初体验

    前言 ​ ⽬前,微服务的架构⽅式在企业中得到了极⼤的发展,主要原因是其解决了传统的单体架构中存在的问题.当单体架构拆分成微服务架构就可以⾼枕⽆忧了吗? 显然不是的.微服务架构体系中同样也存在很多的挑战 ...

  9. 【Django】有关多用户管理的一点小经验分享

    前言 最近,笔者因为需要开发一个系统作为毕设的展示,因此就产生了有关多用户管理的问题.在这里我把自己的需求重新阐明一下:能够通过Django自带的用户管理框架,实现多用户的管理,例如登录.登出.ses ...

  10. 【Visual Studio调教小记录】C++指针靠前靠后??

    本文地址:https://www.cnblogs.com/oberon-zjt0806/p/14631149.html 甜咸之争 经常写C++的基本上避不开使用指针,而且C++中指针类型的写法大体上有 ...