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

把它看成是一个图

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

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

在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");
}
}

  

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

hdu 1116 并查集和欧拉路径的更多相关文章

  1. hdu 1116(并查集+欧拉路径)

    Play on Words Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  2. hdu 1116 Play on Words 欧拉路径+并查集

    Play on Words Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  3. HDU 1116 Play on Words(欧拉路径(回路))

    http://acm.hdu.edu.cn/showproblem.php?pid=1116 题意:判断n个单词是否可以相连成一条链或一个环,两个单词可以相连的条件是 前一个单词的最后一个字母和后一个 ...

  4. hdu 1116 并查集判断欧拉回路通路

    判断一些字符串能首尾相连连在一起 并查集求欧拉回路和通路 Sample Input 3 2 acm ibm 3 acm malform mouse 2 ok ok Sample Output The ...

  5. HDU 1116 Play on Words(并查集和欧拉回路)(有向图的欧拉回路)

    Play on Words Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  6. Play on Words HDU - 1116 (并查集 + 欧拉通路)

    Play on Words HDU - 1116 Some of the secret doors contain a very interesting word puzzle. The team o ...

  7. hdu 4514 并查集+树形dp

    湫湫系列故事——设计风景线 Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tot ...

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

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

  9. HDU 3926 并查集 图同构简单判断 STL

    给出两个图,问你是不是同构的... 直接通过并查集建图,暴力用SET判断下子节点个数就行了. /** @Date : 2017-09-22 16:13:42 * @FileName: HDU 3926 ...

随机推荐

  1. Thread源码分析

    本文为转载,请珍惜别人的劳动成果,注明转载地址:http://www.cnblogs.com/gw811/archive/2012/10/15/2724602.html 1.Runnable接口源码: ...

  2. Instruments_Automation使用入门

    Instruments 是应用程序用来动态跟踪和分析 Mac OS X 和 iOS 代码的实用工具. 这是一个灵活而强大的工具,它让你可以跟踪一个或多个进程,并检查收集的数据. 这样,Instrume ...

  3. Android VLC播放器二次开发1——程序结构分析

    最近因为一个新项目需要一个多媒体播放器,所以需要做个视频.音频.图片方面的播放器.也查阅了不少这方面的资料,如果要从头做一个播放器工作量太大了,而且难度也很大.所以最后选择了VLC作为基础,进行二次开 ...

  4. 几个 Context 上下文的区别

    转自:http://www.blogjava.net/fancydeepin/archive/2013/03/31/java-ee-context.html 在 java 中, 常见的 Context ...

  5. matlab练习程序(图像球面化)

    十一没什么事干,接着看图像算法. 这个球面化算法最初是在ps上的球面化滤镜中看到的,感觉挺有意思,就研究了一下. 算法的详细推导可以在这篇博客中找到,我比较懒,只在纸上推了一遍,就不在博客上编辑了. ...

  6. Codeforces Round #350 (Div. 2) F. Restore a Number 模拟构造题

    F. Restore a Number   Vasya decided to pass a very large integer n to Kate. First, he wrote that num ...

  7. C#之MemberwiseClone与Clone

    MemberwiseClone 方法创建一个浅表副本,具体来说就是创建一个新对象,然后将当前对象的非静态字段复制到该新对象.如果字段是值类型的,则对该字段执行逐位复制.如果字段是引用类型,则复制引用但 ...

  8. SU suphasevel命令学习

  9. A strange lift

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...

  10. ZOJ1654 Place the Robots(二分图最大匹配)

    最大匹配也叫最大边独立集,就是无向图中能取出两两不相邻的边的最大集合. 二分图最大匹配可以用最大流来解. 如果题目没有墙,那就是一道经典的二分图最大匹配问题: 把地图上的行和列分别作为点的X部和Y部, ...