hihocoder第十一周树中的最长路
来源:互联网 发布:oracle数据库oblob操作 编辑:程序博客网 时间:2024/06/08 00:21
- 题目
- 解法
题目
N个结点,用(N-1)个线段连接起来,组成一棵树。求这棵树种,相距最远的两个结点的距离。
输入
每个测试点(输入文件)有且仅有一组测试数据。
每组测试数据的第一行为一个整数N,意义如前文所述。
每组测试数据的第2~N行,每行分别描述一根木棍,其中第i+1行为两个整数Ai,Bi,表示第i根木棍连接的两个小球的编号。
对于20%的数据,满足N<=10。
对于50%的数据,满足N<=10^3。
对于100%的数据,满足N<=10^5,1<=Ai<=N, 1<=Bi<=N
输出
对于每组测试数据,输出一个整数Ans,表示给出的这棵树中距离最远的两个结点之间相隔的距离。
解法
这个题目很像二叉树中,求距离最远的两个结点的距离。在求解时,递归求解每个结点的最大深度,假设左子树深度为L,右子树深度为R,那么经过这个结点的,且以这个结点为根节点的子树中,最远两个结点的距离为L+R。且其父节点的左子树(或右子树)的最大深度为max(L,R)。
这样一来,后续遍历即可。一边就可以找到最远距离。
题目中不同的是,不是二叉树,是多叉树。在表示多叉树关系式,像图一样来表示,用邻接表法。在遍历时,随便以一个结点为根节点,后续遍历即可。因为是多叉树,在求其子树最大深度时,要用两个变量first和second,表示最大深度和次大深度。因为可能有第三个子树深度大于first,这时最大深度first和second都要更新。如果只是大于次大深度second,只需要更新second。
编码测试:
#include<iostream>#include<vector>#include<algorithm>int maxDistance = 0;std::vector<std::vector<int> > G(100001);//存储边信息inline void AddEdge(int v, int s)//把结点v和s关联{ G[v].push_back(s); G[s].push_back(v);}int LastOrder(int pre, int cur){ int first = 0, second = 0;//最大值和次大值 for (size_t i = 0; i < G[cur].size(); ++i) { if (G[cur][i] == pre)//一直向下,不着重复的边 continue; int temp = LastOrder(cur, G[cur][i]);//向下找 if (temp>first) { second = first; first = temp; } else if (temp > second) { second = temp; } } maxDistance = std::max(maxDistance, first + second); return first + 1;}int main(){ int N; std::cin >> N; int Ai, Bi; for (int i = 1; i < N; ++i) { std::cin >> Ai >> Bi; AddEdge(Ai, Bi); } LastOrder(0, 1); std::cout << maxDistance; return 0;}
0 0
- hihocoder-第十一周 树中的最长路
- hihocoder第十一周树中的最长路
- HihoCoder第十一周:树中的最长路
- hiho一下 第十一周——树中的最长路
- hihoCoder 树中的最长路
- hihoCoder #1050 : 树中的最长路
- hihoCoder 1050 树中的最长路
- [HihoCoder]#1050 : 树中的最长路
- hihocoder #1050 树中的最长路
- hihoCoder #1050 : 树中的最长路
- hihocoder 1050 树中的最长路
- hihocoder-1050 树中的最长路(dfs)
- 第七周:[hihocoder]#1050 : 树中的最长路
- hihoCoder 1050 : 树中的最长路 (dfs)
- [hihocoder#1050 : 树中的最长路] 两种树形DP方法求树的最长路
- hihocoder#1050之树中最长路
- hihocoder#1050之树中最长路
- Hihocoder #1050 : 树中的最长路 (两次dfs 或 一次dfs)
- 数据的存储
- 互联网思维:关系
- android 好的开源项目地址
- poj2031 连接所有的球,让连接的线段和最小。
- CTreeCtrl 控件使用总结
- hihocoder第十一周树中的最长路
- 浮点型变量在计算机内存中的存储格式
- 汉字编码在Unicode区间
- 10976 - Fractions Again?!
- 《Python核心编程》第三章练习解析
- 框架中为何要定义DTO
- LabVIEW之生产者/消费者模式--队列操作
- Thinkphp3.1.3 又拍云upyun上传驱动
- 总结i2c相关驱动注册层次说明