hdu-1116(欧拉回路+并查集)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1116
思路:将字符串的头元素和尾元素视为图的x,y节点,然后合并x,y。
如果这个图不连通,则门不能打开,如果路径是欧拉回路或者欧拉通路,则门可以打开。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[],b[],vis[],in[],out[];
char str[];
int f(int x)
{
if(x==a[x]) return a[x];
else
{
a[x]=f(a[x]);
return a[x];
}
}
void Merge(int x,int y)
{
int t1=f(x),t2=f(y);
if(t1!=t2)
{
a[t2]=t1;
}
}
int main(void)
{
int num,i,j,x,y,t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i=;i<;i++)
{
a[i]=i;vis[i]=;
b[i]=;in[i]=;out[i]=;
}
for(j=;j<n;j++)
{
scanf("%s",str);
x=str[]-'a';
y=str[strlen(str)-]-'a';
Merge(x,y);
in[y]++;out[x]++;
vis[x]=;vis[y]=;
}
for(i=;i<;i++) a[i]=f(i);
num=;
for(i=;i<;i++)
if(vis[i]&&a[i]==i) num++;
if(num>)
{
printf("The door cannot be opened.\n");
}
else
{
num=;
for(i=;i<;i++)
if(vis[i]&&in[i]!=out[i]) b[num++]=i;
if(num==)
{
printf("Ordering is possible.\n");
}
else if(num==&&(out[b[]]-in[b[]]==&&in[b[]]-out[b[]]==||
out[b[]]-in[b[]]==&&in[b[]]-out[b[]]==))
printf("Ordering is possible.\n");
else printf("The door cannot be opened.\n");
}
}
return ;
}
hdu-1116(欧拉回路+并查集)的更多相关文章
- hdu 1116 欧拉回路+并查集
http://acm.hdu.edu.cn/showproblem.php?pid=1116 给你一些英文单词,判断所有单词能不能连成一串,类似成语接龙的意思.但是如果有多个重复的单词时,也必须满足这 ...
- Play on Words HDU - 1116 (并查集 + 欧拉通路)
Play on Words HDU - 1116 Some of the secret doors contain a very interesting word puzzle. The team o ...
- HDU 1116 Play on Words(欧拉回路+并查集)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1116 Play on Words Time Limit: 10000/5000 MS (Java/Ot ...
- HDU 1116 || POJ 1386 || ZOJ 2016 Play on Words (欧拉回路+并查集)
题目链接 题意 : 有很多门,每个门上有很多磁盘,每个盘上一个单词,必须重新排列磁盘使得每个单词的第一个字母与前一个单词的最后一个字母相同.给你一组单词问能不能排成上述形式. 思路 :把每个单词看成有 ...
- hdu 3018 Ant Trip 欧拉回路+并查集
Ant Trip Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem ...
- HDU1878 欧拉回路---(并查集+图论性质)
http://acm.hdu.edu.cn/showproblem.php?pid=1878 欧拉回路 Time Limit: 2000/1000 MS (Java/Others) Memory ...
- ACM: FZU 2112 Tickets - 欧拉回路 - 并查集
FZU 2112 Tickets Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u P ...
- HDU 2818 (矢量并查集)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2818 题目大意:每次指定一块砖头,移动砖头所在堆到另一堆.查询指定砖头下面有几块砖头. 解题思路: ...
- POJ2513——Colored Sticks(Trie树+欧拉回路+并查集)
Colored Sticks DescriptionYou are given a bunch of wooden sticks. Each endpoint of each stick is col ...
- nyist 42 一笔画 (欧拉回路 + 并查集)
nyoj42 分析: 若图G中存在这样一条路径,使得它恰通过G中每条边一次,则称该路径为欧拉路径. 若该路径是一个圈,则称为欧拉(Euler)回路. 具有欧拉回路的图称为欧拉图(简称E图).具有欧拉路 ...
随机推荐
- Mysql 触发器 A表记录到B表
1:查询出需要的列名 备用 #列名 select COLUMN_NAME from information_schema.columns where TABLE_SCHEMA='yunpiaobox_ ...
- UI5-文档-2-开发环境
这一部分将指导您安装.配置和设置SAPUI5开发环境的最常见和推荐用例. 请注意:您可以在不同的平台上使用SAPUI5.各自平台的许可和维护条件也适用于SAPUI5.例如,如果在SAP云平台上使用SA ...
- Mysql 知识(3)
1.如何登陆mysql数据库 mysql -u username -p 2.如何开启/关闭mysql服务 service mysql start/stop 3.查看mysql的状态 service m ...
- Installation failed with message INSTALL_CANCELED_BY_USER.
Installation failed with message INSTALL_CANCELED_BY_USER. It is possible that this issue is resolve ...
- Intersecting Lines(叉积,方程)
Intersecting Lines http://poj.org/problem?id=1269 Time Limit: 1000MS Memory Limit: 10000K Total Su ...
- 使用VisualSVN Server搭建SVN服务器[xyytit]
使用 VisualSVN Server来实现主要的 SVN功能则要比使用原始的 SVN和 Apache相配合来实现源代码的 SVN管理简单的多,上手也没有那么复杂. 下面就看看详细的说明 Visual ...
- OOP的几个不常用的方法
from OOP_多态 import cat c = cat("cat") print(c.__doc__) print(cat.__doc__) # # 打印类的描述信息,也就是 ...
- C#数字类型输出字符串时保留指定小数位数的方法
1.使用占位符: 1)float f = 321.12345F;f.ToString("0.00");这样做无论f是不是整数,都将加上2位小数. 2)float f = 321.1 ...
- javascript正则表达式验证密码(必须含数字字符特殊符号,长度4-16位之间)
var newpwd = $("#newpassword").val(); //var pattern = "([A-Za-z]|[0-9]|-|_){4,16}&quo ...
- 如何移除 input type="number" 时浏览器自带的上下箭头?
Chrome 下 input::-webkit-outer-spin-button, input::-webkit-inner-spin-button { -webkit-appearance: no ...