【图论】树的直径

树的直径即为一棵树中距离最远的两点之间的路径

方法一:DFS

先以任意一点为起点跑一遍dfs,记录离起点距离最远的点p(这个点一定是直径的一个端点,感性理解一下不证明了),然后再以最远点再跑一遍dfs,记录此时距离最远的点q,那么pq就是该树的直接

树中有负权边时不可以用这个方法

const int N = 10000 + 10;int n, c, d[N];
vector<int> g[N];void dfs(int u, int fa)
{for (int v : E[u]){if (v == fa) continue;d[v] = d[u] + 1; // 如边有权值,把1换成权值即可if (d[v] > d[c]) c = v; // 更新最大距离的点dfs(v, u);}
}int main()
{cin >> n;for (int i = 1; i < n; i++){int u, v;scanf("%d %d", &u, &v);g[u].push_back(v), g[v].push_back(u);}dfs(1, 0); // 第一遍dfsint p = c; // 一个端点d[c] = 0;dfs(c, 0); // 第二遍dfsint q = c; // 另一个端点cout << d[c];return 0;
}

方法二:树形dp

dp[u]为以u为根的子树中离u最远的点的路径长度
转移方程(v为u的子结点):dp[u] = max(dp[u], dp[v] + w(u, v))
两条经过根结点的最长路径即为该子树中的直径
转移方程:zj = max(zj, dp[u] + dp[v] + w(u, v))

const int N = 10000 + 10;int n, zj = 0;
int dp[N];
vector<int> g[N];void dfs(int u, int fa)
{for (int v : E[u]){if (v == fa) continue;dfs(v, u);zj = max(zj, dp[u] + dp[v] + 1); // 如为有权边,把1换成权值即可dp[u] = max(dp[u], dp[v] + 1); // 如为有权边,把1换成权值即可}
}int main()
{cin >> n;for (int i = 1; i < n; i++){int u, v;cin >> u >> v;g[u].push_back(v), g[v].push_back(u);}dfs(1, 0);cout << zj << '\n';return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/634347.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营第三十七天| 738.单调递增的数字、968.监控二叉树

代码随想录算法训练营第三十七天| 738.单调递增的数字、968.监控二叉树 题目 738.单调递增的数字 当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。 给定一个整数 n &#xff0c;返回 小于或等于 n 的最大数字&#xff0c;且…

【导航】繁星学习随想录

导航&#xff1a;繁星学习随想录 一、编程启示录 01 数据结构漫谈 序号博文名称/链接01扁扁笨算法-AVL树的插入与删除02扁扁笨算法-B树的插入与删除 02 概念小扫盲 序号博文名称/链接01简单理解决策树_如何理解决策树的生长过程-CSDN博客02白盒测试方法与黑盒测试方法简析…

IaC基础设施即代码:Terraform 使用 dynamic动态内联块 创建docker资源

目录 一、实验 1.环境 2.Terraform查看版本 3.Linux主机安装Docker 4.Terraform使用本地编译&#xff08;In-house&#xff09;的Providers 5.Docker-CE 开启远程API 6. Linux主机拉取镜像 7.Terraform 使用 dynamic动态内联块 创建资源 二、问题 1.Terraform 计划资源…

MySQL 8.0中已过时的选项和变量

以下系统变量、状态变量和选项在 MySQL 8.0 版本中已过时&#xff1a; 以下系统变量、状态变量和选项在 MySQL 8.0 版本中已被废弃。 • Compression&#xff1a;客户端连接是否使用压缩的客户端/服务器协议。在 MySQL 8.0.18 版本中废弃。 • Slave_open_temp_tables&#x…

精品基于Uniapp+springboot校园学校趣事管理系统app

《[含文档PPT源码等]精品基于Uniappspringboot趣事管理系统app》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;Java 后台框架&#xff1a;springboot、ssm 安卓…

Webpack5入门到原理2:基本使用

Webpack 是一个静态资源打包工具。 它会以一个或多个文件作为打包的入口&#xff0c;将我们整个项目所有文件编译组合成一个或多个文件输出出去。 输出的文件就是编译好的文件&#xff0c;就可以在浏览器段运行了。 我们将 Webpack 输出的文件叫做 bundle。 功能介绍 Webp…

Unity vs Godot :哪个游戏引擎更适合你?

Unity vs Godot &#xff1a;哪个游戏引擎更适合你&#xff1f; 游戏引擎的选择对开发过程和最终产品质量有着重大影响。近年来&#xff0c;Godot和Unity这两款引擎受到广泛关注。本文将从多个维度对两者进行比较&#xff0c;以期为开发者提供正确的选择建议。 Godot和Unity都有…

Backtrader 文档学习-Indicators混合时间框架

Backtrader 文档学习-Indicators混合时间周期 1.不同时间周期 如果数据源在Cerebro引擎中具有不同的时间范围和不同的长度&#xff0c;指示器将会终止。 比如&#xff1a;data0是日线&#xff0c;data1是月线 。 pivotpoint btind.PivotPoint(self.data1) sellsignal self…

IMDB电影评论的情感分析——paddle

项目地址&#xff1a;IMDB电影评论的情感分析 - 飞桨AI Studio星河社区 (baidu.com) 1. 实验介绍 1.1 实验目的 理解并掌握循环神经网络的基础知识点&#xff0c;包括模型的时序结构、模型的前向传播、反向传播等掌握长短时记忆网络LSTM和门控循环单元网络GRU的设计原理熟悉如…

Halcon基于形变的模板匹配

Halcon基于形变的模板匹配 形变分为两种&#xff0c;一种是基于目标局部的形变&#xff0c;另一种是由于透视关系而产生的形变。基于形变的模板匹配也是一种基于形状的匹配方法&#xff0c;但不同的是&#xff0c;其返回结果中不仅包括轻微形变的形状.形变的位置和参数&#x…

Node.js基础知识点(五)- http

一.request 请求事件处理函数 var http require(http)var server http.createServer() request 请求事件处理函数&#xff0c;需要接收两个参数&#xff1a; Request 请求对象 请求对象可以用来获取客户端的一些请求信息&#xff0c;例如请求路径 Response 响应对象 响应对…

神器yakit之web fuzzer功能

前言 yakit并不像burp一样单独设置爆破模块&#xff0c;但是yakit也是可以爆破的&#xff0c;并且更好用&#xff08;个人感觉&#xff09;。 手工测试场景中需要渗透人员对报文进行反复的发送畸形或者特定的payload进行查看服务器的反馈并以此来进行下一步的判断。 Fuzz标签便…

Verilog基础:强度建模(二)

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 三、拥有单个强度和确定值的net型信号的线与组合&#xff08;线网多驱动&#xff09; 首先来说明一下什么叫信号拥有单个强度和确定值&#xff0c;其实如果一个ne…

开箱即用之MyBatisPlus XML 自定义分页

调用方法 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;public Page<User> queryListByPage(User user) { Page<User> page new Page<>(1, 12); return userMapper.queryListByPage(page, user); } mapper接口 import co…

Vue中的日历组件 Calendar 实现 考勤打卡记录

日历组件 Calendar 可以自定义在页面添加内容。 实现效果图 1.由于Calendar没有右上角月份切换的API事件&#xff0c;可以给组件源码添加自定义添加一个事件 2.也可以通过自带的input事件来获取日历 3.vue页面完整代码 注释&#xff1a;this.$m(this.beginTime).format(…

手撕java必备

刚需import import java.util.Scanner; import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import java.util.ArrayList; import java.util.List; import java.lang.System; import java.io.*; import java.util.*; input场景 场景一&#…

Halcon 一维测量

文章目录 算子矩形算子弧形算子移动到新的参考点 Halcon 案例测量保险丝的宽度&#xff08;边缘对测量&#xff09;使用助手进行测量 halcon 案例获取芯片引脚的个数平均宽度距离&#xff0c;连续两个边缘的距离&#xff08;measure_pos &#xff09;halcon 定位测量Halcon 测量…

科普:大语言模型中的量化是什么意思?

大语言模型是指能够处理大规模文本数据的深度学习模型&#xff0c;例如GPT-3、BERT等。这些模型通常有数十亿甚至数百亿个参数&#xff0c;占用大量的存储空间和计算资源。为了提高这些模型的效率和可移植性&#xff0c;一种常用的方法是模型量化。 1&#xff1a;什么是模型量化…

代码随想录算法训练营第三十七天|738.单调递增的数字、968.监控二叉树、总结

题目&#xff1a;738.单调递增的数字 文章链接&#xff1a;代码随想录 视频链接&#xff1a;LeetCode:738.单调递增的数字 题目链接&#xff1a;力扣题目链接 图释&#xff1a; 从后向前遍历&#xff0c;当后一位数大于前一位位数时&#xff0c;前一位数减减&#xff0c;后…

Java基础面试题-2day

面向对象 创建一个对象用什么运算符&#xff0c;对象实体和对象引用有什么不同&#xff1f; 创建对象使用new String A new String(); A即为对象引用&#xff0c;通过new运算符&#xff0c;创建String()类型的对象实体。 对象引用的存储位置在栈内存 对象实体的存储位置在堆…