poj 1635 Subway tree systems(树的同构,经典)
2015-04-12 01:04
302 查看
题意:
一个有根树。给一种用01序列来表示该树的方式,0表示前进(沿没有访问过的边),1表示沿树边回退。
一个树当然会有多种表示, 问题是给出两个序列,问是否表示同一颗树。
思路:
感觉判断树的同构是个很广的问题。
不过就此题而言,可以对一颗树的所有表示序列,都可以用递归的方式把它们变成一个。(先划分子树,按字典序重排)
也有用dp做的,还有哈希的。。是很值得研究的一题
这道题引起我对两个问题的思考,对于一颗有根树,它的最小表示是什么?无根树呢?
无根树可能需要考虑具有某个度的节点有多少个,以及其相邻关系。。
一个有根树。给一种用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; }
相关文章推荐
- poj 1635 Subway tree systems 判断树的同构 树的最大最小表示法模板
- POJ 1635 Subway tree systems(HASH+判断两棵有根树是否同构)
- 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
- 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
- [POJ 1635] Subway tree systems (树哈希)
- POJ 1635 Subway tree systems 树的Hash 或 树的最小表示法