主要是求能否形成联通的欧拉回路

并查集+ 欧拉回路判断

一开始用dfs判断联通,死活A不出来,Wa了好多次………哭……

并查集一次就AC了

感觉还是并查集代码好写一点,

因为dfs还要判断入口在哪里……2333333

判断欧拉回路:

1.判断联通(dfs|并查集)

2.判断欧拉回路的条件(1.要么所有的点出度等于入度,2.要么只能有一个出度比入度大于1(入口),一个入度比出度小于1(出口)其他的点必须出度等于入度)

代码:

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cmath>
  4. #include <cstring>
  5. #include <algorithm>
  6. #include <cstdlib>
  7. #include <stack>
  8. #include <cctype>
  9. #include <string>
  10. #include <malloc.h>
  11. #include <queue>
  12. #include <map>
  13.  
  14. using namespace std;
  15. const int INF = 0xffffff;
  16. const double Pi = * atan();
  17. const int Maxn = + ;
  18. //int dir2[8][2] = {{-1,0},{0,-1},{-1,1},{1,-1},{-1,-1},{1,0},{0,1},{1,1}};
  19.  
  20. int in[];
  21. int out[];
  22. int f[];
  23.  
  24. int _f(int i){
  25. if(f[i] == i)
  26. return i;
  27. return _f(f[i]);
  28. }
  29.  
  30. int main()
  31. {
  32. #ifndef ONLINE_JUDGE
  33. freopen("inpt.txt","r",stdin);
  34. #endif
  35. int t;
  36. cin >> t;
  37. int n;
  38. while(t--){
  39. cin >> n;
  40. memset(in,,sizeof(in));
  41. memset(out,,sizeof(out));
  42. for(int i = ;i < ;i++)
  43. f[i] = i;
  44. while(n--){
  45. char str[];
  46. cin >> str;
  47. int len = strlen(str);
  48. in[ str[] - 'a' ]++;
  49. out[ str[len-] - 'a' ]++;
  50. int x = _f( str[] - 'a' );
  51. int y = _f( str[len-] - 'a');
  52. if(x != y)
  53. f[x] = y;
  54. }
  55. int cnt = ;
  56. int start = ;
  57. int enn = ;
  58. for(int i = ;i < ;i++){
  59. if(in[i] != out[i]){
  60. cnt++;
  61. if(in[i] - out[i] == )
  62. start++;
  63. else if(out[i] - in[i] == )
  64. enn++;
  65. else
  66. cnt = ;
  67. if(cnt > )
  68. break;
  69. }
  70. }
  71. bool flag = ;
  72. if(start == && enn == && cnt == ){
  73. flag = ;
  74. }
  75. else if(cnt == ){
  76. flag = ;
  77. }
  78. if(!flag){
  79. for(int i = ;i < ;i++){
  80. if(in[i] || out[i]){
  81. for(int j = ;j < ;j++){
  82. if( (in[j] || out[j] ) && _f(i) != _f(j)){
  83. flag = ;
  84. break;
  85. }
  86. }
  87. break;
  88. }
  89. }
  90. }
  91. if(flag)
  92. cout << "The door cannot be opened." << endl;
  93. else
  94. cout << "Ordering is possible." << endl;
  95. }
  96. return ;
  97. }

uva 10129的更多相关文章

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

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

  2. Uva 10129 单词

    题目链接:https://uva.onlinejudge.org/external/101/10129.pdf 把单词的首字母和最后一个字母看做节点,一个单词就是一个有向边.有向图的欧拉定理,就是除了 ...

  3. UVa 10129单词(欧拉回路)

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  4. Uva 10129 - Play on Words 单词接龙 欧拉道路应用

    跟Uva 10054很像,不过这题的单词是不能反向的,所以是有向图,判断欧拉道路. 关于欧拉道路(from Titanium大神): 判断有向图是否有欧拉路 1.判断有向图的基图(即有向图转化为无向图 ...

  5. uva 10129 play on words——yhx

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABNUAAANeCAYAAAA1BjiHAAAgAElEQVR4nOydabWsuhaFywIasIAHJK

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

    题意: 有n个由小写字母的单词,要求判断是否存在某种排列使得相邻的两个单词,前一个单词末字母与后一个单词首字母相同. 分析: 将单词的两个字母看做节点,则一个单词可以看做一条有向边.那么题中所求的排列 ...

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

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

  8. UVA - 10129 Play on Words(欧拉回路+并查集)

    2.解题思路:本题利用欧拉回路存在条件解决.可以将所有的单词看做边,26个字母看做端点,那么本题其实就是问是否存在一条路径,可以到达所有出现过的字符端点.由于本题还要求了两个单词拼在一起的条件是前一个 ...

  9. UVA 10129 Play on Words

    欧拉回路 以字母为结点,单词为边:注意两个相同的单词表示两条边. 并查集判断是否连通,出度,入度判断是否是欧拉回路 #include <iostream> #include <cst ...

  10. uva 10129 poj 1386 hdu 1116 zoj 2016 play on words

    //本来是想练一下欧拉回路的,结果紫书上那题是大水题!!!!! 题意:给出n个单词,是否可以把单词排列成每个单词的第一个字母和上一个单词的最后一个字母相同 解:欧拉通路存在=底图联通+初度!=入度的点 ...

随机推荐

  1. 关于socket的关闭:close和shutdown

    通过两种方式可以关闭一个socket:close和shutdown.直接调用close关闭socket存在以下两个问题: 1. close只是将socket 描述字的访问计数减1,仅当描述字的访问计数 ...

  2. Calling 64-bit assembly language functions lodged inside the Delphi source code

    Code: http://www.atelierweb.com/calling-64-bit-assembly-language-functions-lodged-inside-the-delphi- ...

  3. 《白手起家Win32SDK应用程序》(完整版+目录)

    <白手起家Win32SDK应用程序> 目 录 <白手起家Win32SDK应用程序> 第一篇.预备知识 第二篇.创建Win32工程和主函数 第三篇.增加一个回调函数 第四篇.注册 ...

  4. JAVA之等号、传类对象参数与c++的区别

    在JAVA中用等号对类对象进行赋值,实际上操作的是对象的地址. eg: package MyText; class ClassA { int value; public void seta(int v ...

  5. ConcurrentModificationException异常解决办法

    今天在写一个带缓存功能的访问代理程序时出现了java.util.ConcurrentModificationException异常,因为该异常是非捕获型异常而且很少见,所以费了些时间才找到问题所在,原 ...

  6. HDU 4720Naive and Silly Muggles热身赛2 1005题(分锐角钝角三角形讨论)

    Naive and Silly Muggles Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/ ...

  7. PHP - 计算执行程序耗时

    效果: 首先在includes文件夹下编写,global.func.php函数库: <?php /* * Version:1.0 * CreateTime:2015年11月11日 * Autho ...

  8. 配置SAP 采购合同审批

    需求: 采购合同类型是MK,采购组织是POSC,采购组PGC,标识:估计价格是空,总价有值0.00 - 9999999999.00 RMB 满足以上条件的时候需要审批该合同. 配置: spro-> ...

  9. C#_事件

    C#_事件 概述 今天用来演示事件的例子是模拟实现一个文件下载类,在这个类中我将定义一个DownLoad事件,这个事件用来在文件下载的过程中,向订阅这个事件的用户发出消息,而这个消息将用DownLoa ...

  10. NET Core R2跑Hello World

    在CentOS 7上安装.NET Core R2跑Hello World 前言 在上个月.NET Core出了最新版本预览版,只是在Window系统上试验了一下.原本想等发布正式版的时候在linux系 ...