poj 1635 Subway tree systems(树的同构,经典)
来源:互联网 发布:电子商务平台软件下载 编辑:程序博客网 时间:2024/06/05 04:51
题意:
一个有根树。给一种用01序列来表示该树的方式,0表示前进(沿没有访问过的边),1表示沿树边回退。
一个树当然会有多种表示, 问题是给出两个序列,问是否表示同一颗树。
思路:
感觉判断树的同构是个很广的问题。
不过就此题而言,可以对一颗树的所有表示序列,都可以用递归的方式把它们变成一个。(先划分子树,按字典序重排)
也有用dp做的,还有哈希的。。是很值得研究的一题
这道题引起我对两个问题的思考,对于一颗有根树,它的最小表示是什么?无根树呢?
无根树可能需要考虑具有某个度的节点有多少个,以及其相邻关系。。
// 代码考虑了非法输入,有些凌乱 = =!string go (const string & s) { string ret; vector<string> subs; int i = 0, j = 0, cnt = 0, len = s.length(); for (j=0;j<len;++j) { if (s[j] == '0') cnt += 1; else if (s[j] == '1') cnt -= 1; if (!cnt) { if (s[i] != '0' || s[j] != '1') return ""; if (j-i+1 == 2) subs.push_back(s.substr(i, 2)); else { string tmp = go (s.substr(i+1, j-i)); if (tmp == "") return ""; subs.push_back('0' + tmp + '1'); } i = j+1; } } sort(subs.begin(), subs.end()); for (int i=0;i<subs.size();++i) ret += subs[i]; return ret;}int main(){#ifndef ONLINE_JUDGE freopen("input.in", "r", stdin);#endif string sa, sb; int n; cin >> n; while (n--) { cin >> sa >> sb; string x = go (sa), y = go (sb); if (x == y) cout << "same\n"; else cout << "different\n"; } return 0;}
0 0
- poj 1635 Subway tree systems(树的同构,经典)
- poj 1635 Subway tree systems (树同构)
- poj 1635 Subway tree systems 判断是否是同构树
- pku 1635 Subway tree systems(树的同构,最小表示)
- poj 1635 Subway tree systems 判断树的同构 树的最大最小表示法模板
- Poj 1635 Subway tree systems (树的最小表示)
- poj-1635 Subway tree systems(判断两个有根树是否同构)-哈希法
- POJ 1635 Subway tree systems(HASH+判断两棵有根树是否同构)
- HDU 1954Subway tree systems(树的同构,树的最小表示)
- Subway tree systems - POJ 1635 树的最小表示法
- POJ 1635 Subway tree systems
- poj 1635 Subway tree systems
- poj 1635 Subway tree systems
- POJ 1635 Subway tree systems
- poj 1635 Subway tree systems
- POJ 1635 Subway tree systems
- POJ 1635 Subway tree systems
- POJ 1635 Subway tree systems
- 【98转载】关于来美找cs工作
- C运算符优先级完整口诀
- [Leetcode] 137. Single Number II
- codeforces 223Div2_A
- 通俗讲解下傅立叶分析和小波分析之间的关系[转自知乎.咚懂咚懂咚]
- poj 1635 Subway tree systems(树的同构,经典)
- 微信营销郑州网络营销外包河南php培训seo优化公司微信营销
- 深圳微信营销企业网络营销解决方案--网站建设(网页设计)、优化、推广服务深圳微信营销
- linux下uniq命令
- 求一个数组中和最小的连续子数组
- Computer and computer Science(计算机与计算机科学)
- LeetCode(066) Plus One (Java)
- android2.3.4增加gsensor
- [Leetcode] 138. Copy List with Random Pointer