简单高效的最近公共祖先问题c++实现
来源:互联网 发布:网络推动经济发展 编辑:程序博客网 时间:2024/05/16 13:13
题目连接
http://hihocoder.com/problemset/problem/1062
#include "stdafx.h"#include <string> #include <iostream> #include <algorithm> #include <map> using namespace std;//这个的含义是,建立一个哈希表,键值是儿子//值为父亲,即将父亲和儿子的映射关键建立//注意一个父亲可以有多个孩子,因此将儿子作为键值,是一一对应的关系map<string, string> sf;//son,fathermap<string, int> vis;//判断是否已经访问int n, m;//要查找的两个孩子void find(string a, string b) { vis.clear(); string tmp = a; while (!tmp.empty()) //找出这个孩子的左右祖先 { vis[tmp] = 1;//标记访问 //在哈希表中查找,如果他有父亲的话,则将父亲给temp tmp = sf[tmp]; //在查找父亲的父亲 } //即完成了寻找这个孩子的所有祖先的问题 tmp = b;//将b孩子给temp,注意多了一个条件 while (!tmp.empty() && !vis[tmp]) //即只需要找到未标记到的即可 tmp = sf[tmp];//因为,如果已标记了的话,则一定是两个孩子的最近公共祖先 if (!tmp.empty())//如果不空的话,则输出这个祖先 cout << tmp << endl; else cout << -1 << endl;}//测试int main() { string a, b; scanf("%d", &n); sf.clear(); while (n--) { cin >> a >> b; sf[b] = a; } scanf("%d", &m); while (m--) { cin >> a >> b; find(a, b); } return 0;}
0 0
- 简单高效的最近公共祖先问题c++实现
- 最近公共祖先问题
- 最近公共祖先问题
- 最近公共祖先问题
- 最近公共祖先问题
- 并查集解树的最近公共祖先问题
- 最近的公共祖先
- hihoCoder - 1062 - 最近公共祖先·一 (树的最近公共祖先问题!)
- 最近公共祖先--LCA问题
- 【转】最近公共祖先问题
- LCA(最近公共祖先)问题
- 【14】最近公共祖先问题
- 最近公共祖先LCA问题
- 最近公共祖先LCA问题
- 最近公共祖先LCA问题
- LCA(最近公共祖先)问题
- 最近公共祖先问题LCA
- LCA 最近公共祖先问题
- gap锁 对于unique index 和Ununique index
- OMAP35x Technical Reference Manual (Rev. Y)
- 使用SQL Profile稳定SQL语句的执行计划
- 配置log4j
- 字符串的旋转
- 简单高效的最近公共祖先问题c++实现
- 使用HTML语法图文混排
- 剑指Offer----面试题29:数组中出现次数超过一半的数字
- linux挂硬盘方法
- 学习java的态度很重要!
- Linux 下安redis
- Java泛型中E、T、K、V等的含义
- Java开发常用的在线工具
- Java开发常用的在线工具