题目分析




来源:acwing

分析:

树的直径的概念: 树上最远的两个节点之间的距离就被称为树的直径,连接这两点的路径被称为树的最长链。

类似于圆的直径的概念:圆上直线距离最远的两个点构成直径。

这是模板题,请参考:算法提高课-动态规划-树形DP-AcWing 1072. 树的最长路径:dfs写法

只不过模板题是有边权的,这道题边权都是1.写起来更加简单。

这道题是树的直径的模板题,前提是能识别出来。

首先,问题很明显,求图(树)任意两点距离的最大值,这在树中的定义就是树的直径。这条路径称为树的最长链。

然后,这种模板题在提高课讲过,放在树形dp那里讲的。

讲的做法是dfs,遍历每个点,以该点作为最高点,求它的儿子们从上到下路径长度的最大值和次大值,加起来就是最高点的最大路径长。

ac代码

#include<bits/stdc++.h>
using namespace std;
const int N = 20010, M = N;
int n, m;
int h[N],e[M],ne[M],idx;
int ans;void add(int a, int b){e[idx] = b, ne[idx] = h[a], h[a] = idx ++;
}int dfs(int u){int d1 = 0, d2 = 0; // 最大距离和次大距离// 遍历所有的儿子for(int i = h[u]; ~i; i = ne[i]){int j = e[i];int d = dfs(j); //返回儿子j自上而下的最大距离if( d >= d1) d2= d1, d1= d;else if( d > d2) d2 = d;}ans = max(ans, d1 + d2); // 以u为最高点的链的最大值// 边权为1,a --> b --> c,d1是b-->c的距离,还得加上a-->b的距离1return d1 + 1;
}int main(){cin >> n >> m;memset(h, -1, sizeof h);// 交换机和电脑等价,直接读入//交换机的编号1~n,电脑的编号n + 1 ~ n + m,for(int i= 2; i <= n + m; i ++){int p;cin >> p;add(p, i); // 连一条p到i的边,根到儿子的边}dfs(1); // 从根结点遍历cout << ans << endl;
}

题目来源

https://www.acwing.com/problem/content/3218/

题解分享:https://www.acwing.com/blog/content/1632/

CSP认证201503-4 网络延时[C++题解]:树的直径相关推荐

  1. CSP认证201709-4 通信网络[C++题解]:dfs、建立两张图:正向建图和反向见图、统计联通点的个数

    文章目录 题目解答 题目链接 题目解答 来源:acwing 分析: 这题就是判断每个点的连通性,如果能够到达所有的n个点,就表示该点满足题意. 这里的连通性指的是自己沿着正向边能够到达哪些点,还有就是 ...

  2. CSP认证201403-4 无线网络[C++题解]:宽搜、bfs最短路、图论

    文章目录 题目解答 题目链接 题目解答 来源:acwing 分析:BFS求最短路. 使用pair来存点的坐标,使用邻接表来存图. 宽搜模板套进来. 提供一组测试用例:注意可能爆int,所以需要用lon ...

  3. CSP认证201803-2 碰撞的小球[C++题解]:模拟

    文章目录 题目解答 题目链接 题目解答 来源:acwing 分析: 题目理解: 给定水平方向的线段和n个小球,给定速度和碰撞后反向运动等条件,模拟小球碰撞过程,求解最后时刻所有小球的位置. 题目解答: ...

  4. CSP认证201809-4 再卖菜[C++题解]:差分约束、前缀和

    文章目录 题目解答 题目链接 题目解答 来源:acwing 分析: 对于a0,a1,...,ana_0, a_1,...,a_na0​,a1​,...,an​,经过计算相邻的数的平均值得到b0,b1, ...

  5. CSP认证201712-1 最小差值[C++题解]:遍历

    文章目录 题目解答 题目链接 题目解答 来源:acwing 分析: 直接排序,然后取相邻两数之差的最小值. ac代码 #include<bits/stdc++.h> using names ...

  6. CSP认证201512-2 消除类游戏[C++题解]:模拟

    题目分析 来源:acwing 分析: 本题类似消消乐,同一行或者同一列满足3个或者更多个同色的可以消除(数值置为0),由于数据量比较小,时间复杂度可以到O(n3)O(n^3)O(n3). 这里是对每个 ...

  7. CSP认证201509-3 模板生成系统[C++题解]:字符串处理、模拟、哈希表、引号里面有空格的字符串怎么读入

    题目分析 来源:acwing 分析: 本题采用vector< string > 来读入原来模板.接下来的m行需要用到哈希表,进行模板和具体内容的映射. 遍历vector,如果找到{{,就对 ...

  8. CSP认证201412-4 最优灌溉[C++题解]:最小生成树裸题、Kruskal算法求最小生成树

    题目分析 来源:acwing 分析:这是一道最小生成树的裸题. 这里默写Kruskal求最小生成树的最小费用的模板. 最小生成树模板请参考笔者的另一篇博文: 最小生成树板子-AcWing 859. K ...

  9. CSP认证201412-2 Z字形扫描[C++题解]:模拟

    文章目录 题目解答 题目链接 题目解答 分析: 转换视角,斜着当作一行,然后就是简单地从左到右和从右到左循环. 具体分析过程如下图: AC代码 #include<bits/stdc++.h> ...

最新文章

  1. Nginx 的 default_server 指令
  2. 外媒:英特尔移动业务正分崩离析,收购联发科或能自救
  3. 可行性nullpoj 2723 Get Luffy Out 2sat
  4. OpenCV在ARM上的移植
  5. 四轴飞行器1.4 姿态解算和Matlab实时姿态显示
  6. OprenCV学习之路一:将彩色图片转换成灰度图
  7. 警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to
  8. ctf(pwn)栈溢出介绍
  9. 一些C和C++的常见问题集锦 ----不停更新
  10. 软件项目管理概览----版本控制
  11. js移除某个class_用JS添加和删除class类名
  12. 位运算实现加减乘除四则运算(Java)
  13. 美图回应meitu商标纠纷:不影响主营业务 社交业务商标完备
  14. Myeclipse 2020.5 版本首发!支持 Java14
  15. 助力社区防疫,百数提供了一款管理系统模板
  16. 企业微信自建应用开发
  17. DAC8830+STM32驱动
  18. Linux perm
  19. 郭台铭资产对比马云谁更有钱?两人身价多少亿
  20. 股市跷跷板—债券基金

热门文章

  1. SqlHelper简单实现(通过Expression和反射)2.特性和实体设计
  2. 数据库系统概念学习笔记2
  3. msiexec 命令使用文档
  4. 双中心单电子积分计算氢分子离子H2+的轨道能量
  5. sql 自动 清理 ldf 日志_阳泉自动转盘式喷砂机
  6. 【Paper】2021_Distributed Consensus Tracking of Networked Agent Systems Under Denial-of-Service Attack
  7. python基础8(来自廖雪峰的官方网站)
  8. 【arduino】arduino ISP下载程序方法,用arduino uno给arduino nano下载程序
  9. ESP8266、ESP32 和 ESP32-S2 对比
  10. 乐高积木搭建微型地球仪,lego微型地球仪搭建详细流程