hdu 1116 欧拉回路+并查集
来源:互联网 发布:linux 播放器剪辑 编辑:程序博客网 时间:2024/05/01 15:42
http://acm.hdu.edu.cn/showproblem.php?pid=1116
给你一些英文单词,判断所有单词能不能连成一串,类似成语接龙的意思。但是如果有多个重复的单词时,也必须满足这样的条件才能算YES。否则都是不可能的情况。
欧拉回路和欧拉通路的判定可以总结为如下:
1)所有的点联通
2)欧拉回路中所有点的入度和出度一样。
3)欧拉通路中起点的入度 - 出度 = 1,终点的 初度 - 入度 = 1, 其他的所有点入度 = 出度;
所以用并查集搞就好了
#pragma comment(linker, "/STACK:36777216")#pragma GCC optimize ("O2")#include <stdio.h>#include <stdlib.h>#include <math.h>#include <string.h>#define RD(x) scanf("%d",&x)#define RD2(x,y) scanf("%d%d",&x,&y)#define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z)#define clr0(x) memset(x,0,sizeof(x))typedef long long LL;#define maxn 30int fa[maxn],vis[maxn];int f(int x){return x == fa[x] ? x:(fa[x]=f(fa[x]));}void merge(int x,int y){ x = f(x),y = f(y); if(x != y) fa[x] = y;}int out[maxn],in[maxn],ans[maxn],i,j;char s[1000];void solve(){ int n;RD(n); clr0(out),clr0(in),clr0(vis); for(i = 0;i < 26;++i) fa[i] = i; while(n--){ scanf("%s",s); int x = s[0] - 'a',y = s[strlen(s) - 1] - 'a'; merge(x,y); out[x]++,in[y]++; vis[x] = vis[y] = 1; } int cnt = 0; for(i = 0;i < 26;++i) if(vis[i] && f(i) == i){ cnt++; if(cnt > 1){ //图不连通 puts("The door cannot be opened."); return ; } } for(i = 0;i < 26;++i) if(vis[i] && out[i] != in[i]){ //统计入度和出度不相等的点的信息 ans[cnt++] = i; } if(cnt == 1 || cnt == 3 && (out[ans[1]] - in[ans[1]] == in[ans[2]] - out[ans[2]]) && abs(in[ans[2]] - out[ans[2]]) == 1) puts("Ordering is possible."); else puts("The door cannot be opened."); return;}int main(){ int _;RD(_);while(_--) solve(); return 0;}
0 0
- hdu 1116 欧拉回路+并查集
- hdu 1116 poj 1386 欧拉回路并查集
- hdu 1116 Play on Words(并查集+欧拉回路|| 欧拉路径)
- [HDU 1116]Play on Words(欧拉回路/欧拉路径+并查集)
- hdu 1878 欧拉回路【并查集入门】
- hdu 1878_欧拉回路_并查集
- HDU 1878 欧拉回路 【并查集+欧拉图】
- HDU 1878:欧拉回路【并查集】
- HDU-1878(欧拉回路)(并查集)
- HDU 1878 欧拉回路 【基础并查集】
- HDU 3018 Ant Trip ( 并查集+欧拉回路 )
- 【HDU】-1878-欧拉回路(并查集)
- HDU-1878-欧拉回路【并查集】
- hdu-1878-欧拉回路-图论-并查集-java
- 【HDU 1878】欧拉回路(并查集)
- HDU 1878 欧拉回路 (使用并查集~)
- hdu 1878 欧拉回路 欧拉回路+并查集
- HDU 1878 欧拉回路 (并查集+欧拉回路)
- 6-2 多态性与虚函数
- C# Usage of CallerInformation
- SEO数据分析之搜索下拉框
- STL之List
- 简单配置虚拟机VMare linux上的samba方便测试和学习Unix编程
- hdu 1116 欧拉回路+并查集
- 【笔记】环形队列链式
- Qt音乐播放器制作(二)Easy Player
- 黑马程序员--Java基础--关于环境变量path设置
- Map---keySet---entrySet
- iOS沙盒目录的查看,作用,特点
- object c NSArray 数组的排序
- 黑马程序员_面对对象
- 【HTML】基础知识【UNDONE】