(并查集+欧拉通路)
来源:互联网 发布:数据分析师知乎 编辑:程序博客网 时间:2024/05/17 03:06
HDU/HDOJ 1116 Play on Words(并查集+欧拉通路)
题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1116
离散数学的知识,囧,这一块没怎么学,基础很薄弱啊。
不过对于欧拉回路/通路的结论,倒是不难推出。
欧拉通路:除首尾结点外,其余结点入度等于出度,起点出度减入度等于1,终点入度减出度等于1
欧拉回路:所有结点的入度都等于出度
思路:将每一个单词的首尾字母当做结点,首尾字母间连线,判断最后形成的有向图能否形成欧拉通路/回路,用并查集。
这题直接参考了网上的。
代码:
1
#include<stdio.h>
2
#include<string.h>
3
#define N 27
4
int
out[N],in[N],flag[N],p[N],father[N];
5
int
find(
int
x)
6
{
7
int
r=x;
8
while
(father[r]!=r)
9
r=father[r];
10
return
r;
11
}
12
void
Union(
int
a,
int
b)
13
{
14
int
fx,fy;
15
fx=find(a);
16
fy=find(b);
17
if
(fx!=fy)
18
father[fx]=fy;
19
}
20
int
main()
21
{
22
int
i,k,cnt,a,b,ncase,n;
23
char
s[1002];
24
scanf
(
"%d"
,&ncase);
25
while
(ncase--)
26
{
27
for
(i=0;i<26;i++)
28
father[i]=i;
//初始化
29
memset
(in,0,
sizeof
(in));
30
memset
(out,0,
sizeof
(out));
31
memset
(flag,0,
sizeof
(flag));
32
scanf
(
"%d"
,&n);
33
for
(i=1;i<=n;i++)
34
{
35
scanf
(
"%s"
,s);
36
a=s[0]-
'a'
;
37
b=s[
strlen
(s)-1]-
'a'
;
38
Union(a,b);
39
in[b]++;
40
out[a]++;
41
flag[a]=flag[b]=1;
42
}
43
cnt=0;
44
for
(i=0;i<26;i++)
45
{
46
father[i]=find(i);
47
if
(flag[i] && father[i]==i)
48
cnt++;
//计算连通分支个数
49
}
50
if
(cnt>1)
//不是连通图
51
{
52
printf
(
"The door cannot be opened.\n"
);
53
continue
;
54
}
55
k=0;
56
for
(i=0;i<26;i++)
57
{
58
if
(flag[i] && in[i]!=out[i])
59
p[k++]=i;
//计算入度不等于出度的结点数
60
}
61
if
(k==0)
//是欧拉回路
62
{
63
printf
(
"Ordering is possible.\n"
);
64
continue
;
65
}
66
if
(k==2 && (out[p[0]]-in[p[0]]==1 && in[p[1]]-out[p[1]]==1
67
|| out[p[1]]-in[p[1]]==1 && in[p[0]]-out[p[0]]==1) )
68
{
//是欧拉通路
69
printf
(
"Ordering is possible.\n"
);
70
continue
;
71
}
72
printf
(
"The door cannot be opened.\n"
);
73
}
74
return
0;
75
}
- (并查集+欧拉通路)
- hdu 1116(欧拉通路,并查集)
- FZU2112 Tickets (并查集+欧拉通路)经典
- POJ 2513 欧拉通路+并查集+trie树
- poj2513_欧拉通路+并查集+hash/trie
- POJ2513-并查集+欧拉通路+字典树
- poj2513Colored Sticks(欧拉通路+字典树+并查集)
- poj 1386 并查集+有向欧拉通路
- poj2513 Colored Sticks(tire树+路径压缩并查集+欧拉通路)
- [ACM] POJ 2513 Colored Sticks (Trie树,欧拉通路,并查集)
- 杭电1116————欧拉回路(通路) + 并查集基础
- poj 2513 Colored Sticks(trie+并查集+欧拉通路)
- POJ 2513(字典树hash+并查集+欧拉通路)
- (NYoj 230)彩色棒 --欧拉通路,字典树,并查集
- poj_2513 Colored Sticks(字典树+并查集+欧拉通路)
- nyoj 42 一笔画问题(欧拉通路+dfs || 并查集)
- POJ 2513-Colored Sticks(连接木棍-trie树+并查集+欧拉通路)
- POJ 2513 Colored Sticks (Trie + 并查集 + 欧拉通路)
- Android加载网页JavaScript与Java之间的相互调用
- stackoverflow : Why C++ output is too much slower than C?
- hdu 4545 魔法串
- 2013 电影
- 黑马韩前成linux从入门到精通の3分钟搞定VPN服务器
- (并查集+欧拉通路)
- Win7笔记本电脑启用虚拟WIFI共享上网(转)
- Crawler中的问题
- PHPCMS V9“密码重试次数太多,请过-xxx分钟后重新登录!”的解决办法
- 汇编语言DEBUG命令大全
- RMQ算法模板
- 关于面试
- 同花顺 tzc
- HDU 4545 魔法串