当前位置: 首页 > news >正文

【图论】树的直径

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

方法一: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.lryc.cn/news/283883.html

相关文章:

  • 制作一个Python聊天机器人
  • docker 使用 vcs/2018 Verdi等 eda 软件
  • Git教程学习:01 Git简介与安装
  • 写操作系统之开发加载器
  • openlayers [九] 地图覆盖物overlay三种常用用法 popup弹窗,marker标注,text文本
  • rabbitmq-java基础详解
  • openssl3.2 - 官方demo学习 - smime - smsign.c
  • Klocwork—符合功能安全要求的自动化静态测试工具
  • 运筹说 第56期 | 整数规划的数学模型割平面法
  • vue中内置指令v-model的作用和常见使用方法介绍以及在自定义组件上支持
  • 大模型推理引擎面试复习大纲
  • 网络安全 | 苹果承认 GPU 安全漏洞存在,iPhone 12、M2 MacBook Air 等受影响
  • C++ 数论相关题目(约数)
  • freeswitch on centos dockerfile模式
  • Hologres + Flink 流式湖仓建设
  • Linux粘滞位的理解,什么是粘滞位?
  • Stable Diffusion的结构要被淘汰了吗?详细解读谷歌最新大杀器VideoPoet
  • 深度学习与大数据推动下的自然语言处理革命
  • 产品经理必备之最强管理项目过程工具----禅道
  • 美易官方:贝莱德预计美联储将在6月份开始降息,欧洲央行紧随其后
  • 视觉检测系统:工厂生产零部件的智能检测
  • Spring事务的四大特性+事务的传播机制+隔离机制
  • 基于arcgis js api 4.x开发点聚合效果
  • 什么是DDOS高防ip?DDOS高防ip是怎么防护攻击的
  • 提示词工程: 大语言模型的Embedding(嵌入和Fine-tuning(微调)
  • rust获取本地外网ip地址的方法
  • 三、Sharding-JDBC系列03:自定义分片算法
  • 像操作本地文件一样操作linux文件 centos7环境下samba共享服务搭建详细教程
  • web块级如何居中,关于css/html居中问题
  • docker 部署 springboot 2.6.13 jar包流程笔记