跟Uva 10054很像,不过这题的单词是不能反向的,所以是有向图,判断欧拉道路。

关于欧拉道路(from Titanium大神):

判断有向图是否有欧拉路

1.判断有向图的基图(即有向图转化为无向图)连通性,用简单的DFS即可。如果图都不连通,一定不存在欧拉路

2.在条件1的基础上

  对于欧拉回路,要求苛刻一点,所有点的入度都要等于出度,那么就存在欧拉回路了

  对于欧拉道路,要求松一点,只有一个点,出度比入度大1,这个点一定是起点; 一个点,入度比出度大1,这个点一定是终点.其余点的出度等于入度

 (注意,只能大1,而且这样的点分别只能有1个,而且存在起点就一定要存在终点,存在终点就一定要存在起点)

他用判断连通性用的是DFS,我用的是并查集实现。

然后判断为欧拉回路(入度=出度)或者欧拉道路(出入度相差1的点只有不同的两个)(而且其他点出度=入度!)。

代码:

  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <cstring>
  4. const int maxn = 30;
  5. int f[maxn], g[maxn][maxn], id[maxn], od[maxn];
  6. int t, n, root;
  7.  
  8. int Find(int x) {
  9. if (x != f[x])
  10. return f[x] = Find(f[x]);
  11. return x;
  12. }
  13.  
  14. int main () {
  15. scanf("%d", &t);
  16. while (t--) {
  17. char word[1001];
  18. scanf("%d", &n);
  19. for (int i = 0; i < maxn; i++) {
  20. f[i] = i;
  21. id[i] = 0;
  22. od[i] = 0;
  23. for (int j = 0; j < maxn; j++)
  24. g[i][j] = 0;
  25. }
  26. for (int i = 0; i < n; i++) {
  27. scanf("%s", word);
  28. int a = word[0] - 'a', b = word[strlen(word) - 1] - 'a';
  29. g[a][b]++;
  30. od[a]++;
  31. id[b]++;
  32. f[Find(a)] = Find(b);
  33. root = Find(b);
  34. }
  35. int i, ans = 0, flag = 1, in = 0, on = 0;
  36. for (i = 0; i < maxn; i++)
  37. if (id[i] || od[i]) {
  38. if (Find(f[i]) != root)
  39. ans++;
  40. if (id[i] - od[i] == 1)
  41. in++;
  42. else if (od[i] - id[i] == 1)
  43. on++;
  44. else if (abs(id[i] - od[i]) > 1)
  45. break;
  46. }
  47. // printf("%d %d %d %d\n", i, ans, in, on);
  48. if (i < maxn || ans > 0 || in > 1 || on > 1)
  49. printf("The door cannot be opened.\n");
  50. else
  51. printf("Ordering is possible.\n");
  52. }//while
  53. return 0;
  54. }

Uva 10129 - Play on Words 单词接龙 欧拉道路应用的更多相关文章

  1. UVa 10129 Play On Words【欧拉道路 并查集 】

    题意:给出n个单词,问这n个单词能否首尾接龙,即能否构成欧拉道路 按照紫书上的思路:用并查集来做,取每一个单词的第一个字母,和最后一个字母进行并查集的操作 但这道题目是欧拉道路(下面摘自http:// ...

  2. UVA 10441 - Catenyms(欧拉道路)

    UVA 10441 - Catenyms 题目链接 题意:给定一些单词,求拼接起来,字典序最小的,注意这里的字典序为一个个单词比过去,并非一个个字母 思路:欧拉回路.利用并查集判联通,然后欧拉道路判定 ...

  3. UVA 10129 Play on Words(欧拉道路)

    题意:给你n个字符串,问你是否可以出现一条链,保证链中每个字符串的第一个元素与上一个字符串的最后一个元素相同,注意可能重复出现同一个字符串 题解:以每一个字符串第一个元素指向最后一个元素形成一个有向图 ...

  4. poj1386单词连接(欧拉欧拉欧拉)

    ///单词连接,欧拉回路通路都可以(有向图) ///主要构图:比如possibilities就构造p->s的边////题目大意:给你若干个字符串,一个单词的尾部和一个单词的头部相同那么这两个单词 ...

  5. 【UVa】12118 Inspector's Dilemma(欧拉道路)

    题目 题目     分析 很巧秒的一道题目,对着绿书瞎yy一会. 联一下必须要走的几条边,然后会形成几个联通分量,统计里面度数为奇数的点,最后再减去2再除以2.这样不断相加的和加上e再乘以t就是答案, ...

  6. UVa 11426 - GCD - Extreme (II) 转化+筛法生成欧拉函数表

    <训练指南>p.125 设f[n] = gcd(1, n) + gcd(2, n) + …… + gcd(n - 1, n); 则所求答案为S[n] = f[2]+f[3]+……+f[n] ...

  7. BZOJ5394: [Ynoi2016]炸脖龙(欧拉广义降幂)

    就是让你求这个: 传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=5394 解题思路: NOIP2018后第一道题,感觉非常像那个上帝与集合的 ...

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

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

  9. UVa 10129 Play on Words(并查集+欧拉路径)

    题目链接: https://cn.vjudge.net/problem/UVA-10129 Some of the secret doors contain a very interesting wo ...

随机推荐

  1. 完成端口(IOCP)怎么判断某个连接是否断开

    完成端口函数: BOOL GetQueuedCompletionStatus( HANDLE CompletionPort, LPDWORD lpNumberOfBytes, PULONG_PTR l ...

  2. silverlight调用MVC WebApi方法

    1.创建ASP.NET MVC4 Web应用程序,选择WebAPI模板 2.添加silverlight项目 3.新建一个数据模型类,代码如下: using System; using System.C ...

  3. php safe mode bypass all <转>

    PHP safe mode bypass from 4.x to 5.x all. Functions: * mb_send_mail* curl_init* imap_open* mail* ion ...

  4. windows的iis做后门,隐藏访问,无日志<转>

    windows下的iis5/iis6做后门,隐藏访问,不留访问记录或者不留日志 好不容易攻下一台Windows2000/2003 IIS服务器,你一定会想,怎样才能长期占有这个“肉鸡”呢?聪明的你肯定 ...

  5. CodeForces 164C Machine Programming 费用流

    Machine Programming 题目连接: http://codeforces.com/problemset/problem/164/B Descriptionww.co One remark ...

  6. CodeForces 173A Rock-Paper-Scissors 数学

    Rock-Paper-Scissors 题目连接: http://codeforces.com/problemset/problem/173/A Description Nikephoros and ...

  7. 全面整理的C++面试题

    C++面试题 1.是不是一个父类写了一个virtual 函数,假设子类覆盖它的函数不加virtual ,也能实现多态? virtual修饰符会被隐形继承的. private 也被集成,仅仅事派生类没有 ...

  8. .net 调用C++类库

    事实上这一直是个非常无解的问题.最好的办法是将C++类库写成COM. 可是有时候往往不能这个做.那就仅仅有两种办法:转成C函数形式或者Manage C++封装. 下文就介绍了这两种方法. 原帖:htt ...

  9. MySql之char与varchar

    MySql之char与varchar的差别 char是一种固定长度的类型,varchar则是一种可变长度的类型.它们的差别是:  1. char(M)类型的数据列里.每一个值都占用M个字节.假设某个长 ...

  10. 龙书(Dragon book) +鲸书(Whale book)+虎书(Tiger book)

    1.龙书(Dragon book)书名是Compilers: Principles,Techniques,and Tools作者是:Alfred V.Aho,Ravi Sethi,Jeffrey D. ...