---恢复内容开始---

把它看成是一个图

只是需要欧拉路径就可以了 首尾能连成一条线即可

如果要判断这个图是否连通 得用并查集

在hrbust oj里面看答案学到的方法 不用各种for循环套着判断能否循环

只需要在union的时候做做调整 让比较大的父亲节点的父亲节点等于小的父亲节点 向1靠拢就可以

但是在这里面 是向出现过的最小的字母的排序靠拢 所以要记录

而且for循环26个字母的时候 只对出现过的字母做判断它是否与最小的字母可以连通

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<map>
using namespace std;
int ru[30];
int chu[30];
int fa[30];
int vis[30];
void init()
{for(int i=1;i<=26;i++){ru[i]=0;chu[i]=0;fa[i]=i;vis[i]=0;}
}
int find(int i)
{return fa[i]==i?i:find(fa[i]);
}
void un(int a,int b)
{int aa=find(a);int bb=find(b);if(aa>bb)fa[aa]=bb;else fa[bb]=aa;
}
int main(){int t;scanf("%d",&t);while(t--){int n;scanf("%d",&n);char s[2000];init();int minn=26;for(int i=0;i<n;i++){scanf("%s",s);int a=s[0]-'a'+1;int len=strlen(s);int b=s[len-1]-'a'+1;chu[a]++;ru[b]++;un(a,b);vis[a]++;vis[b]++;if(a<minn)minn=a;if(b<minn)minn=b;}int yi=0;int er=0;int san=0;bool ok=true;for(int i=1;i<=26;i++){if(ru[i]==chu[i])yi++;else if(ru[i]==chu[i]+1)er++;else if(ru[i]==chu[i]-1)san++;if(vis[i]!=0){if(find(i)!=minn)ok=false;}}if(yi==24&&er==1&&san==1&&ok==true)printf("Ordering is possible.\n");else if(yi==26&&ok==true)printf("Ordering is possible.\n");else printf("The door cannot be opened.\n");}
}

  

---恢复内容结束---

转载于:https://www.cnblogs.com/rayrayrainrain/p/5188521.html

hdu 1116 并查集和欧拉路径相关推荐

  1. 最小生成树总结(prim、并查集和kruskal) C++实现

    <span style="font-family: 微软雅黑; widows: auto; background-color: inherit;">摘要:</sp ...

  2. hdu 1116 欧拉回路 并查集 一组字符串能否首尾相连成一个字符串

    主要是欧拉回路的基础知识,用并查集加工处理 注意欧拉回路和并查集的细节判断 不能粘贴复制,一定要理解之后再敲一遍代码,否则浪费更多的时间 #include <stdio.h> #inclu ...

  3. hdu 5606(并查集)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5606 解题思路: 这题实际上是要找一些连通的节点,使得边上的权值都为0. 很明显,首先把权值为0的边都 ...

  4. HDU 5441并查集 by cyl

    HDU 5441 题意: ​ 杰克喜欢旅游,从城市a到城市b是他最喜欢的,现在有n个城市m个路. ​ 当杰克在从城市a到城市b 的时候需要坐车,但是需要有等待时间t,他无法忍受超过x 的等待时间. ​ ...

  5. hdu 1232 并查集

    并查集是我暑假从高手那里学到的一招,觉得真是太精妙的设计了.以前我无法解决的一类问题竟然可以用如此简单高效的方法搞定.不分享出来真是对不起party了.(party:我靠,关我嘛事啊?我跟你很熟么?) ...

  6. 并查集和prime和kruskal

    现在有10个强盗,下面9行两个人是一个团伙 1 2 3 4 5 2 4 6 2 6 8 7 9 7 1 6 2 4 求有几个团伙 //并查集 #include<stdio.h> int f ...

  7. hdu 1116 Play on Words

    我的思路: 用俩个数组分别记录出现过的节点的入度和出度,这样只有一个字母的入度比出度大1,一个字母的出度比入度大1,或者是所有有字母的出度和入度都一样,他就是欧拉路 但这样还差了一个联通性的判断 于是 ...

  8. 【浙大软件学院机试】深度优先搜索、并查集和优先级队列知识点(Python实现)

    文章目录 1 DFS模板 2 DFS例题-地下迷宫探索(深搜输出路径) 3 并查集 4 优先级队列-Huffman树 1 DFS模板 import math import cmath import s ...

  9. hdu 1116 Play on Words(欧拉通路)

    题意:给出给出n个单词,要求判断这些单词能否接龙,规则像成语接龙一样,就是当前单词的尾字母为下一个单词的首字母. 思路:看着像是欧拉通路相关的题目,但是重点就在于怎么抽象出来. 刚开始想了半天没想明白 ...

最新文章

  1. 用openoffice+jodconverter+webuploader+pdf.js实现文件上传、在线预览功能
  2. React兄弟组件之间通信
  3. c语言最长公共子序列_LCS(最长公共子序列)
  4. Google小组研发模式分析
  5. labview案例_10余年工程师大牛告诉你,学好LabVIEW,什么时候都不算晚
  6. Docker如何删除一个镜像
  7. idea怎么运行eclipse的web项目_Apache Storm v2.0入门项目的开发、测试和运行(IDEA/Maven)...
  8. LA 3989 - Ladies' Choice 稳定婚姻问题
  9. ucenter词语过滤原理
  10. Android Wear缺少本质上的创新
  11. C语言的行指针和列指针
  12. 最全整理浏览器兼容性问题与解决方案
  13. 苹果php集成环境安装包,MacOS平台免费的PHP集成开发环境
  14. 【Python】网络爬虫
  15. 硬盘录像机常见问题解答硬盘录像机故障解决
  16. 追忆信息论之父-香农博士
  17. 如何用python编写财务记账软件_Python实现简单的记账本功能
  18. Could not autowire. No beans of 'StudentService' type found
  19. Query Planning(查询方案)(搜索一)
  20. 使用贝叶斯进行新闻分类

热门文章

  1. fpga运算服务器_当FPGA也成为一种服务,你还在顾虑什么?
  2. 数据传输加密非对称加密算法以及对称算法-RSA+AES
  3. 一个UWP 框架开发的哔哩哔哩非官方应用
  4. java程序设计特点_Java编程语言的特点
  5. 腾讯地图 多个异步script互相依赖加载问题
  6. python手机触屏代码_使用python实现触摸?
  7. Linux学习笔记Day01-02 Xshell下载安装过程
  8. 千古以來:卍佛一心)悟道真机(转载)
  9. 编译报错undefined symbol: vtable for
  10. 互联网公司和外包公司有什么区别?为什么有些程序员不想进外包公司?