CSP认证201503-4 网络延时[C++题解]:树的直径
题目分析
来源: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++题解]:树的直径相关推荐
- CSP认证201709-4 通信网络[C++题解]:dfs、建立两张图:正向建图和反向见图、统计联通点的个数
文章目录 题目解答 题目链接 题目解答 来源:acwing 分析: 这题就是判断每个点的连通性,如果能够到达所有的n个点,就表示该点满足题意. 这里的连通性指的是自己沿着正向边能够到达哪些点,还有就是 ...
- CSP认证201403-4 无线网络[C++题解]:宽搜、bfs最短路、图论
文章目录 题目解答 题目链接 题目解答 来源:acwing 分析:BFS求最短路. 使用pair来存点的坐标,使用邻接表来存图. 宽搜模板套进来. 提供一组测试用例:注意可能爆int,所以需要用lon ...
- CSP认证201803-2 碰撞的小球[C++题解]:模拟
文章目录 题目解答 题目链接 题目解答 来源:acwing 分析: 题目理解: 给定水平方向的线段和n个小球,给定速度和碰撞后反向运动等条件,模拟小球碰撞过程,求解最后时刻所有小球的位置. 题目解答: ...
- CSP认证201809-4 再卖菜[C++题解]:差分约束、前缀和
文章目录 题目解答 题目链接 题目解答 来源:acwing 分析: 对于a0,a1,...,ana_0, a_1,...,a_na0,a1,...,an,经过计算相邻的数的平均值得到b0,b1, ...
- CSP认证201712-1 最小差值[C++题解]:遍历
文章目录 题目解答 题目链接 题目解答 来源:acwing 分析: 直接排序,然后取相邻两数之差的最小值. ac代码 #include<bits/stdc++.h> using names ...
- CSP认证201512-2 消除类游戏[C++题解]:模拟
题目分析 来源:acwing 分析: 本题类似消消乐,同一行或者同一列满足3个或者更多个同色的可以消除(数值置为0),由于数据量比较小,时间复杂度可以到O(n3)O(n^3)O(n3). 这里是对每个 ...
- CSP认证201509-3 模板生成系统[C++题解]:字符串处理、模拟、哈希表、引号里面有空格的字符串怎么读入
题目分析 来源:acwing 分析: 本题采用vector< string > 来读入原来模板.接下来的m行需要用到哈希表,进行模板和具体内容的映射. 遍历vector,如果找到{{,就对 ...
- CSP认证201412-4 最优灌溉[C++题解]:最小生成树裸题、Kruskal算法求最小生成树
题目分析 来源:acwing 分析:这是一道最小生成树的裸题. 这里默写Kruskal求最小生成树的最小费用的模板. 最小生成树模板请参考笔者的另一篇博文: 最小生成树板子-AcWing 859. K ...
- CSP认证201412-2 Z字形扫描[C++题解]:模拟
文章目录 题目解答 题目链接 题目解答 分析: 转换视角,斜着当作一行,然后就是简单地从左到右和从右到左循环. 具体分析过程如下图: AC代码 #include<bits/stdc++.h> ...
最新文章
- Nginx 的 default_server 指令
- 外媒:英特尔移动业务正分崩离析,收购联发科或能自救
- 可行性nullpoj 2723 Get Luffy Out 2sat
- OpenCV在ARM上的移植
- 四轴飞行器1.4 姿态解算和Matlab实时姿态显示
- OprenCV学习之路一:将彩色图片转换成灰度图
- 警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to
- ctf(pwn)栈溢出介绍
- 一些C和C++的常见问题集锦 ----不停更新
- 软件项目管理概览----版本控制
- js移除某个class_用JS添加和删除class类名
- 位运算实现加减乘除四则运算(Java)
- 美图回应meitu商标纠纷:不影响主营业务 社交业务商标完备
- Myeclipse 2020.5 版本首发!支持 Java14
- 助力社区防疫,百数提供了一款管理系统模板
- 企业微信自建应用开发
- DAC8830+STM32驱动
- Linux perm
- 郭台铭资产对比马云谁更有钱?两人身价多少亿
- 股市跷跷板—债券基金
热门文章
- SqlHelper简单实现(通过Expression和反射)2.特性和实体设计
- 数据库系统概念学习笔记2
- msiexec 命令使用文档
- 双中心单电子积分计算氢分子离子H2+的轨道能量
- sql 自动 清理 ldf 日志_阳泉自动转盘式喷砂机
- 【Paper】2021_Distributed Consensus Tracking of Networked Agent Systems Under Denial-of-Service Attack
- python基础8(来自廖雪峰的官方网站)
- 【arduino】arduino ISP下载程序方法,用arduino uno给arduino nano下载程序
- ESP8266、ESP32 和 ESP32-S2 对比
- 乐高积木搭建微型地球仪,lego微型地球仪搭建详细流程