题目描述

树的直径必然取自某个节点的两个(或一个)最深的子树,可以一遍DFS解决。

#include <iostream>
#include <algorithm>
#include <vector>using namespace std;vector<int> tree[100005];
bool has_parent[100005] = { false };
int max_length[100005];
int ans;void solve(int root_idx) {int lgst = 0, lgst_idx = 0;int size = tree[root_idx].size();for (int i = 0; i < size; i++) { // 递归求树深int sub_idx = tree[root_idx][i];solve(sub_idx);if (lgst < max_length[sub_idx]) {lgst = max_length[sub_idx];lgst_idx = i;}}max_length[root_idx] = lgst + 1;int sec_lgst = 0;for (int i = 0; i < size; i++) { // 次深子树深度int sub_idx = tree[root_idx][i];if (sec_lgst < max_length[sub_idx] && i != lgst_idx) {sec_lgst = max_length[sub_idx];}}ans = max(ans, lgst + sec_lgst);
}int main() {int n;cin >> n;for(int i = 1; i < n; i++) {int a, b;cin >> a >> b;if (has_parent[a]) {tree[a].push_back(b);has_parent[b] = true;} else {tree[b].push_back(a);has_parent[a] = true;}}for (int i = 1; i <= n; i++) {if (!has_parent[i]) {solve(i);break;}}cout << ans << endl;return 0;
}

另一种做法是两遍BFS:以任一个节点为根BFS找到最远的节点,再从该节点BFS找到的最长路径就是直径。

#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>using namespace std;vector<int> tree[100005];
int length[100005];
int max_length, max_idx;void bfs(int root_idx, int pa_idx, int depth) {length[root_idx] = depth;if (max_length < depth) {max_length = depth;max_idx = root_idx;}int len = tree[root_idx].size();for (int i = 0; i < len; i++) {int sub_idx = tree[root_idx][i];if (sub_idx != pa_idx) {bfs(sub_idx, root_idx, depth + 1);}}
}int main() {int n;cin >> n;for(int i = 1; i < n; i++) {int a, b;cin >> a >> b;tree[a].push_back(b);tree[b].push_back(a);}bfs(1, -1, 0);bfs(max_idx, -1, 0);cout << max_length << endl;return 0;
}

  

转载于:https://www.cnblogs.com/xblade/p/4478218.html

[hiho 11]树的直径相关推荐

  1. 树的直径【p3629】[APIO2010]巡逻

    Description 在一个地区中有 n 个村庄,编号为 1, 2, ..., n.有 n – 1 条道路连接着这些村 庄,每条道路刚好连接两个村庄,从任何一个村庄,都可以通过这些道路到达其 他任一 ...

  2. Codeforces 337D Book of Evil:树的直径【结论】

    题目链接:http://codeforces.com/problemset/problem/337/D 题意: 给你一棵树,n个节点. 如果一个节点处放着"罪恶之书",那么它会影响 ...

  3. hdu 4607 Park Visit 求树的直径

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4607 Claire and her little friend, ykwd, are travelli ...

  4. BZOJ 2282 树的直径

    SDOI2011的Dayx第2题 题意: 在树中找到一条权值和不超过S的链(为什么是链呢,因为题目中提到"使得路径的两端都是城市",如果不是链那不就不止两端了吗--怎么这么机智的感 ...

  5. 历届试题 大臣的旅费(树的直径)

    试题 历届试题 大臣的旅费 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 很久以前,T王国空前繁荣.为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市. 为 ...

  6. hdu 4679 树的直径

    1 /* 2 题目大意:给n个点n-1条边的树,求删除哪条边时两个树中最大的直径与边权的乘积最小. 3 树的直径(Diameter)是指树上的最长简单路. 4 直径的求法:两遍BFS (or DFS) ...

  7. [蓝桥杯][2013年第四届真题]大臣的旅费(树的直径)

    题目描述 很久以前,T王国空前繁荣.为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市. 为节省经费,T国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个大城市都能从首 ...

  8. 历届试题 大臣的旅费(深搜 树的直径)

    问题描述 很久以前,T王国空前繁荣.为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市. 为节省经费,T国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个大城市都能从首 ...

  9. P3629-[APIO2010]巡逻【树的直径】

    正题 题目大意 刚开始一棵树,在树中加入k条边(k<=2)使得这些边都得走过的情况下,每个点都到达并回到原点的最少边. 解题思路 首先我们发现如果不加边的话答案是2∗(n−1)2*(n-1)2∗ ...

最新文章

  1. log4j配置文件详解
  2. js 对有“命名空间”的表单做深度解析
  3. 【小知识点】解决Chrome动画”卡顿”的办法
  4. Android编译32或64位程序
  5. Jquery对象本质和隐式迭代
  6. QT信号与槽-启动系统程序以及相关控件介绍
  7. layui弹框提示层:倒计时(layui-font-red颜色定义)
  8. # 字节数组转uint32_字节跳动客户端校招面经(21届秋招内推)
  9. ubuntu linux开机启动自动加载ko驱动程序_一文讲透 CentOS 开机流程
  10. mysql主从复制原理详解_深入研究MySQL(三)、主从复制原理及演示
  11. java输入年月输出日历_Java实现按年月打印日历功能【基于Calendar】
  12. 【Centos】【Linux】如何杀掉进程——【进程杀手】2020-12-01
  13. 前端基础学习之Sass
  14. win10清理_别人都说win10不需要装电脑管家,那电脑产生的垃圾该怎么清理呢
  15. LoadLibrary()动态调用dll失败,GetLastError()返回126
  16. MATLAB——画图(经典)
  17. 最大值减最小值等于区间长度_数理统计第19讲(区间估计概念,枢轴量法)
  18. 计算机科学与技术需要什么电脑配置,如果你要配置一台计算机,需要购买的硬件配置有哪些,主要技术参数是什么?...
  19. 使用树莓派GPIO17和GPIO18连接DS18B20温度传感器(关于DS18B20的时序设置)
  20. 微信小程序富文本中图片溢出,使用max-width无效

热门文章

  1. 2020中国最佳雇主榜揭晓,友邦人寿、上海迪士尼等15家企业入选
  2. 百信银行算法工程师 校招一面面经
  3. ORACLE18C具有什么特性,Oracle 18c 必须掌握的新特性 Sharding系列(3) -- Sharding对象说明...
  4. stm32滴答计时器_STM32——系统滴答定时器
  5. 2022内蒙古最新水利水电施工安全员模拟考试试题及答案
  6. LoadRunner下载、安装与使用 | VUGen、Controller、Analysis | 性能测试笔记
  7. 亚马逊一直停留在身份验证_如何为您的Amazon帐户启用两因素身份验证
  8. python 控制语句 ‘混泥土’ 循环 上
  9. 面试官爱问Spring初始化?别急,看完这篇文章,咱去吊打他
  10. 保护环(GuardRing)