传送门:   UVA - 10129

题目大意:

给定一些单词(可能会重复出现),判断单词是否能排成一个序列,前提是单词的最后一个字母与下一个单词的第一个字母相同.输出"The door cannot be opened."(不可能)或者"Ordering is possible."(可能).

单词数小于 10,000,且单个测试的有多组数据.

解题思路:

将单词看作链接首尾字母的边,建图,寻找 一条欧拉路径.(E.P.),需要判断底图(即无向图 或 由有向图看作的无向图)是否连通(连接性),其次是端点的度数(除起始点外(度数为奇),其他点入度应总是等于出度).其中判断来连接性的算法有(紫书P169):

 算法一:DFS

判断能否用邻接表遍历所有边即可,代码后续补上.

算法二:UFS

用并查集判断连通(最适合不过了),详细代码(改自GitHub)

 // 题意:输入n个单词,是否可以排成一个序列,使得每个单词的第一个字母和上一个单词的最后一个字母相同
 // 算法:把字母看作结点,单词看成有向边,则有解当且仅当图中有欧拉路径。注意要先判连通
 #include<cstdio>
 #include<cstring>
 #include<vector>
 using namespace std;

  + ;

 // 并查集(代码摘自《算法竞赛入门经典——训练指南》第三章)
 ];
 int findset(int x) { return pa[x] != x ? pa[x] = findset(pa[x]) : x; } 

 ], deg[]; // 是否出现过;度数

 int main() {
   int T;
   scanf("%d", &T);
   while(T--) {
     int n;
     char word[maxn];

     scanf("%d", &n);
     memset(used, , sizeof(used));
     memset(deg, , sizeof(deg));
     for(int ch = 'a'; ch <= 'z'; ch++) pa[ch] = ch; // 初始化并查集
     ; // 连通块个数

     ; i < n; i++) {
       scanf("%s", word);
       ], c2 = word[strlen(word)-];
       deg[c1]++;//出度增
       deg[c2]--;//入度减  <---这份代码的神奇之处
       used[c1] = used[c2] = ;
       int s1 = findset(c1), s2 = findset(c2);
       if(s1 != s2) { pa[s1] = s2; cc--; }//容易写错
     }

     vector<int> d;
     for(int ch = 'a'; ch <= 'z'; ch++) {
       if(!used[ch]) cc--; // 没出现过的字母
       ) d.push_back(deg[ch]);
     }
     bool ok = false;//只存在一个连通块为: 欧拉回路|| 欧拉路径
      && (d.empty() || (d.size() ==  && (d[] ==  || d[] == -)))) ok = true;
     if(ok) printf("Ordering is possible.\n");
     else printf("The door cannot be opened.\n");
   }
   ;
 }

[欧拉路径]Play on Words UVA10129的更多相关文章

  1. Play on Words UVA - 10129 欧拉路径

    关于欧拉回路和欧拉路径 定义:欧拉回路:每条边恰好只走一次,并能回到出发点的路径欧拉路径:经过每一条边一次,但是不要求回到起始点 ①首先看欧拉回路存在性的判定: 一.无向图每个顶点的度数都是偶数,则存 ...

  2. UVA10129 Play on Words —— 欧拉回路

    题目链接:https://vjudge.net/problem/UVA-10129 代码如下: // UVa10129 Play on Words // Rujia Liu // 题意:输入n个单词, ...

  3. 【USACO 3.3】Riding The Fences(欧拉路径)

    题意: 给你每个fence连接的两个点的编号,输出编号序列的字典序最小的路径,满足每个fence必须走且最多走一次. 题解: 本题就是输出欧拉路径. 题目保证给出的图是一定存在欧拉路径,因此找到最小的 ...

  4. hdu 3472 HS BDC(混合路的欧拉路径)

    这题是混合路的欧拉路径问题. 1.判断图的连通性,若不连通,无解. 2.给无向边任意定向,计算每个结点入度和出度之差deg[i].deg[i]为奇数的结点个数只能是0个或2个,否则肯定无解. 3.(若 ...

  5. poj 2337 有向图输出欧拉路径

    Catenyms Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10186   Accepted: 2650 Descrip ...

  6. nyoj 42 一笔画问题 欧拉路径

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=42 欧拉回路,欧拉路径水题~ 代码: #include "stdio.h&quo ...

  7. UESTC 917 方老师的分身IV --求欧拉路径

    判断欧拉路径是否存在及求出字典序最小的欧拉路径问题(如果存在). 将字符串的第一个字母和最后一个字母间连边,将字母看成点,最多可能有26个点(a-z),如果有欧拉路径,还要判断是否有欧拉回路,如果有, ...

  8. POJ1780 Code(欧拉路径)

    n位密码,要用尽可能短的序列将n位密码的10n种状态的子串都包括,那么要尽量地重合. 题目已经说最短的是10n + n - 1,即每一个状态的后n-1位都和序列中后一个状态的前n-1位重合. 这题是经 ...

  9. hdu 1116 并查集和欧拉路径

    ---恢复内容开始--- 把它看成是一个图 只是需要欧拉路径就可以了 首尾能连成一条线即可 如果要判断这个图是否连通 得用并查集 在hrbust oj里面看答案学到的方法 不用各种for循环套着判断能 ...

随机推荐

  1. SpringBoot01 InteliJ IDEA安装、Maven配置、创建SpringBoot项目、属性配置、多环境配置

    1 InteliJ IDEA 安装 下载地址:点击前往 注意:需要下载专业版本的,注册码在网上随便搜一个就行啦 2 MAVEN工具的安装 2.1 获取安装包 下载地址:点击前往 2.2 安装过程 到官 ...

  2. Unity Shader - 消融效果原理与变体

    基本原理与实现 主要使用噪声和透明度测试,从噪声图中读取某个通道的值,然后使用该值进行透明度测试. 主要代码如下: fixed cutout = tex2D(_NoiseTex, i.uvNoiseT ...

  3. C++大数精度计算(带小数点)

    转: (原出处不可考,若有侵权,请联系我立即删除) 头文件: // WTNumber.h: interface for the CWTNumber class. // //////////////// ...

  4. swiper使用小结

    最近做一个移动端项目想用Swiper移动端插件,需求实现一个轮播图的效果,并且需要自定义分页器,效果跟这个差不多这里demo 好吧,开始动手! 注意参考的3.0Swiper的API文档需要引入3.0版 ...

  5. HTML笔记<note1>

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  6. CURL常用命令记录--用于简单测试接口

    curl命令是一个利用URL规则在命令行下工作的文件传输工具.它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具.作为一款强力工具,curl支持包括HTTP.HTTPS.f ...

  7. JavaScript--我发现,原来你是这样的JS(再说引用类型,基本包装类型与个体内置对象)

    一.介绍 本篇是续上一篇的,引用类型的后篇,本篇主要是说基本包装类型和个体内置对象.如果你能收获一些知识,那我很高兴,很满足,哈哈哈,希望大家能愉快看完.如果你想学好一门技术,要不忘初心,方得始终. ...

  8. python函数说明内容格式错误

    def levlTwo(levloneList,levlOneNum): """ 入参levloneList 一级城市列表 入参levlOneNum 用户选择的城市序号 ...

  9. Windows 安装 python2.7

    Windows 安装 python2.7 python2.7下载地址: https://www.python.org/downloads/release/python-2714/ 安装过程: 设置系统 ...

  10. poj 3484 Showstopper

    Showstopper Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2236   Accepted: 662 Descri ...