POJ2513Colored Sticks(欧拉路加字典树)
传送门
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 using namespace std; 5 const int maxn = 5e5 + 10; 6 const int maxsize = 27; 7 8 int par[maxn]; 9 int rnk[maxn]; 10 char s1[20], s2[20]; 11 int vis[maxn]; 12 int ch[maxn][maxsize]; 13 int val[maxn]; 14 15 int t; 16 17 void init() { 18 for (int i = 0; i < maxn; i++) { 19 par[i] = i; 20 rnk[i] = 0; 21 } 22 } 23 24 int find(int x) { 25 if (par[x] == x) return x; 26 else return par[x] = find(par[x]); 27 } 28 29 void unite(int x, int y) { 30 x = find(x); 31 y = find(y); 32 if (x == y) return; 33 34 if (rnk[x] < rnk[y]) { 35 par[x] = y; 36 } else { 37 par[y] = x; 38 if (rnk[x] == rnk[y]) rnk[x]++; 39 } 40 } 41 42 bool same(int x, int y) { 43 return find(x) == find(y); 44 } 45 46 struct Tire { 47 int sz; 48 Tire() { 49 sz = 1; 50 memset(ch[0], 0, sizeof(ch[0])); 51 } 52 int idx(char c) {return c - 'a';} 53 54 int FFF(char* s) { 55 int len = strlen(s); 56 int u = 0; 57 for (int i = 0; i < len; i++) { 58 int c = idx(s[i]); 59 if (!ch[u][c]) { 60 memset(ch[sz], 0, sizeof(ch[sz])); 61 val[sz] = 0; 62 ch[u][c] = sz++; 63 } 64 u = ch[u][c]; 65 } 66 if (!val[u]) val[u] = t++; 67 return val[u]; 68 } 69 70 }; 71 72 73 74 int main() { 75 init(); 76 int tag = 0; 77 Tire Tree; 78 t = 1; 79 while (~scanf("%s%s", s1, s2)) { 80 int a = Tree.FFF(s1), b = Tree.FFF(s2); 81 vis[a]++; vis[b]++; 82 if (!same(a, b)) { 83 unite(a, b); 84 } 85 tag++; 86 //if (tag == 5) break; 87 } 88 int odd = 0; 89 bool flag = 1; 90 for (int i = 1; i < t && flag; i++) { 91 if (vis[i] & 1) odd++; 92 if (find(i) != find(1)) flag = 0; 93 } 94 if (odd != 0 && odd != 2) { 95 flag = 0; 96 } 97 if (flag) { 98 puts("Possible"); 99 } else { 100 puts("Impossible"); 101 } 102 return 0; 103 }
转载于:https://www.cnblogs.com/xFANx/p/8516458.html
POJ2513Colored Sticks(欧拉路加字典树)相关推荐
- 【牛客 - 369C】小A与欧拉路(bfs树的直径)
题干: 链接:https://ac.nowcoder.com/acm/contest/369/C 来源:牛客网 小A给你了一棵树,对于这棵树上的每一条边,你都可以将它复制任意(可以为0)次(即在这条边 ...
- 小A与欧拉路 (树加边求最小权值欧拉路+树的直径)
链接:https://ac.nowcoder.com/acm/contest/369/C 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言2621 ...
- POJ_2513Colored Sticks 字典树+
比较考察技术含量的一道题. 参考链接:http://blog.csdn.net/lyy289065406/article/details/6647445 题目链接:http://poj.org/pro ...
- POJ - 2513 Colored Sticks 欧拉通路+并查集+静态树
一开始想用map来搞,但是感觉好复杂,然后想了一下看大佬们用trie做的,感觉十分合理就敲了一发. 一开始re,数组要开到550000 只会静态的字典树,在每个根节点看是否出现过改颜色,如果没有就把该 ...
- 小A与欧拉路(牛客-树的直径)
题解: 欧拉路:从图中任意一个点开始到图中任意一个点结束的路径,并且图中每条边只通过恰好一次 问你走完这树上所有的点最短路径是什么. 因为树是没有环的,所以你走到叶子结点的时候需要往回走,也就是再走一 ...
- POJ-2513 Colored Sticks 字典树,欧拉回路
这题用map就超时了,所以用字典树来优化,第一次写静态的,现在都不习惯用指针了. 由于这里不要回到源点,所以不许要所有点的度都为偶数,零个或者两个均可,图也必须是连通的. 代码如下: #include ...
- POJ - 2513 Colored Sticks(字典树+并查集+欧拉回路)
题目链接:点击查看 题目大意:给出n个木棍,问若两两相连,最终能否构成一根长直木棍,相连的规则是两个木棍的相接端点的颜色需要保持相同 题目分析:关于这个题目,我们可以将每个木棍视为一条边,每个木棍的两 ...
- 图论--欧拉路,欧拉回路(小结)
在题目中在慢慢细说概念 1.HDU - 3018 Ant Trip 题目大意:又N个村庄,M条道路.问须要走几次才干将全部的路遍历 解题思路:这题问的是有关欧拉路的判定 欧拉路就是每条边仅仅能走一次, ...
- C++ __gnu_pbds(平板电视)超详细教程(C++内置的平衡树,字典树,hash)
整理的算法模板合集: ACM模板 目录 一.平衡树 例题:luogu P3369 [模板]普通平衡树 1. `rb_tree_tag`版 2. `splay_tree_tag`版 功能不够?自己添加! ...
最新文章
- CentOS7.5下yum安装MySQL8图文教程
- java excel api xlsx_Java 解析Excel(xls、xlsx两种格式)
- Effective C#(二)
- mongodb创建数据库用户名和密码_Linux运维老司机,教你MongoDB 的不同连接方式
- mysql傻瓜教程_mysql索引的使用傻瓜教程_MySQL
- 【论文速读】ChengLin_Liu_ICCV2017_Deep_Direct_Regression_for_Multi-Oriented_Scene_Text_Detection...
- php版canvas,PHP实现将HTML5中Canvas图像保存到服务器
- python 类self作用_self在Python中有什么用途?
- html小米秒杀倒计时,JavaScript_JQuery仿小米手机抢购页面倒计时效果,1、效果及功能说明
通过对时 - phpStudy...
- [操作系统]Nachos4.1安装教程(docker+linux)
- 【摄影测量】利用经度L、纬度B、大地高h及heading pitch roll飞行姿态角将IMU惯导坐标系转换到WGS84坐标系
- clean code 读书笔记
- 台式计算机设置热点,台式机怎么设置无线热点
- 杂文笔记(一):博弈论在网络安全中的应用
- 什么是DOM0,DOM2,DOM3?
- 何文江先生出任创意信息集团总经理
- eBPF系列学习(4)了解libbpf、CO-RE (Compile Once – Run Everywhe) | 使用go开发ebpf程序(云原生利器cilium ebpf )
- 标准字头密码体制c语言,关于Playfair密码体制
- 奥塔在线:Linux下按日期自动创建目录脚本
- 键盘输入字符串 数字转换为 * 英文字母大写转小写 小写转大写