欧拉回路

以字母为结点,单词为边;注意两个相同的单词表示两条边。

并查集判断是否连通,出度,入度判断是否是欧拉回路

 #include <iostream>
#include <cstring>
#include <cstdio>
using namespace std; int map[];
int g[][];
int num[][];
int v[],f[]; int father (int i){
f[i]=f[i]==i?f[i]:father (f[i]);
return f[i];
} int main (){
int t,n;
scanf ("%d",&t);
while (t--){
cin>>n;
char s[];
memset (v,,sizeof v);
memset (g,,sizeof g);
for (int i=;i<n;i++){
scanf ("%s",s);
int len=strlen (s);
g[s[]-'a'][s[len-]-'a']++;
v[s[]-'a']=v[s[len-]-'a']=;
}
int flag=;
for (int i=;i<;i++) f[i]=i;
for (int i=;i<;i++)
for (int j=;j<;j++)
if (g[i][j]||g[j][i])
f[father(i)]=father(j);
for (int i=;i<;i++){
for (int j=;j<;j++){//cout<<i<<j<<endl;
if (v[i]&&v[j]){
if (father(i)!=father(j)){
flag=;break ;
}
}
}
if (!flag)
break ;
}
if (!flag){
printf ("The door cannot be opened.\n");
continue ;
}
int c,r;//cout<<"error"<<endl;
c=;r=;
for (int i=;i<;i++){
int temp=;
for (int j=;j<;j++){
temp+=g[i][j]-g[j][i];
}
if (temp==&&c)
c=;
else if (temp==-&&r)
r=;
else if (temp==) ;
else {
flag=;
break ;
}
}
if (flag)
printf ("Ordering is possible.\n");
else printf ("The door cannot be opened.\n");
}
return ;
}

UVA 10129 Play on Words的更多相关文章

  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 poj 1386 hdu 1116 zoj 2016 play on words

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

随机推荐

  1. Python模块的介绍

    Python模块的学习: 1.os模块: 下面只对os模块中几个比较常用的方法做一些简单的示例: os.system():这个方法在shell中体现的比较多,在dos命令行中也可以执行,下面就以在do ...

  2. 问题汇总-20130927-关于rc.local命令无法执行

    场景:/etc/rc.local有语句 /usr/local/apache/bin/apachectl start mysql cactidb -u root -p123456 -e ' set gl ...

  3. GTW likes gt(BC 模拟 or 优先队列)

    GTW likes gt Accepts: 54 Submissions: 782 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 13107 ...

  4. wordpress教程之修改上传文件大小限制

    1. 修改apache配置文件 php.ini upload_max_filesize = 64M  post_max_size = 64M  max_execution_time = 300 //上 ...

  5. Extjs4 Grid内容已经拿到但是不显示数据

    原先照着Extjs4.0.7官方文档写了一个GridPanel的列子,没有什么问题,今天又自己写了一个,效果如下,内容肯定拿到就是不显示: 经过一段代码排查后,问题出在了自定义Model时将field ...

  6. 一个C#多线程的工作队列

    多线程添加元素到队列中,队列根据绑定 的事件进行自动处理,可以设置WorkSequential属性来实现对队列处理的单线程(严格顺序处理)或者多线程处理(循序出队,但是 多线程处理,不保证对队列元素的 ...

  7. EXT JS 4.3 在线学习

    官网地址:http://docs.sencha.com/extjs/4.1.3/ 相关示例:http://docs.sencha.com/extjs/4.1.3/#!/example Examples ...

  8. Windows多线程同步系列之三-----事件对象

    事件是一个内核事件,内核事件是什么呢,我理解也不深入也不好说,暂且理解为一个内核维护的数据类型吧通过内核事件同步主要 的方法是对事件的信号有和无来进行同步. 比如当我们一个线程进入一段临界代码(独占代 ...

  9. IOS Custom NavigationItem --写titleView

    //先自己写一个titleView UIView *titleView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 20)];//all ...

  10. 理解会话中的Cookie和Session对象

    会话可以简单理解为:用户打开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 在java语言中,Servlet程序是由WEB服务器调用,web服务器收到客 ...