树的直径 树形dp+2次dfs

news/2024/5/19 3:24:27/文章来源:https://blog.csdn.net/m0_61949623/article/details/126671478


 

题目描述

给定一棵树 T ,树 T 上每个点都有一个权值。

定义一颗树的子链的大小为:这个子链上所有结点的权值和 。

请在树 T 中找出一条最大的子链并输出。

输入描述:

 

第一行输入一个 n,1≤n≤105。

接下来一行包含n个数,对于每个数 ai,−10^5≤ai≤10^5,表示 i 结点的权值。

接下来有n-1行,每一行包含两个数u,v( 1≤u,v≤n , u != v),表示u与v之间有一条边。

输出描述:

 

仅包含一个数,表示我们所需要的答案。

示例1

输入

5
2 -1 -1 -2 3
1 2
2 3
2 4
2 5

输出

4

说明

样例中最大子链为1 -> 2 -> 5

备注:

一个结点,也可以称作一条链

 树形dp:

如果值在边上的话

void DP(int u,int pa)
{dp[u]=0;for(int i=h[u];i;i=ne[i]){int v=e[i];if(v==pa) continue;DP(v,u);ans=max(ans,dp[u]+dp[v]+dis[i]);dp[u]=max(dp[u],dp[v]+dis[i]);}
}

如果值在点上的话

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF =0x3f3f3f3f;
const int N=1e5+10;
int n;
ll idx,e[N*2],h[N],ne[2*N],w[N],dp[N],ans;
bool vis[N];
void add(int x,int y)
{e[idx]=y;ne[idx]=h[x];h[x]=idx++;
}
void dfs(int x)
{dp[x]=w[x];vis[x]=1;ans=max(ans,w[x]);for(int i=h[x]; ~i; i=ne[i]){int j=e[i];if(vis[j])continue;dfs(j);ans=max(ans,dp[x]+dp[j]);dp[x]=max(dp[x],dp[j]+w[x]);}
}
int  main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>n;memset(h,-1,sizeof h);ans=-INF;for(int i=1; i<=n; i++){cin>>w[i];}for(int i=1; i<=n-1; i++){int u,v;cin>>u>>v;add(u,v);add(v,u);}dfs(1);cout<<ans;return 0;
}

两次dfs

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF =0x3f3f3f3f;
const int N=1e5+10;
int n,pos;
ll idx,e[N*2],h[N],ne[2*N],w[N],dp[N],ans;
bool vis[N];
void add(int x,int y)
{e[idx]=y;ne[idx]=h[x];h[x]=idx++;
}
void dfs(int now,ll x)
{vis[now]=1;if(ans<x){ans=x;pos=now;}for(int i=h[now]; ~i; i=ne[i]){int j=e[i];if(vis[j])continue;dfs(j,x+w[j]);}
}
int  main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>n;memset(h,-1,sizeof h);ans=-INF;for(int i=1; i<=n; i++){cin>>w[i];}for(int i=1; i<=n-1; i++){int u,v;cin>>u>>v;add(u,v);add(v,u);}dfs(1,w[1]);//cout<<ans;memset(vis,0,sizeof vis);dfs(pos,w[pos]);cout<<ans;return 0;
}

 

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

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

相关文章

我赢助手小技巧:学会这三招,爆款内容视频完播率提高50%(下)

上一篇我们说了爆款内容的四大共性和底层逻辑&#xff0c;今天我们来看一看如何去设置标题、封面和剧情&#xff0c;实现视频的完播率。 第三个技巧叫内容高潮。 要在3秒钟之内让用户兴趣高涨&#xff0c;把这样的脚本写出来&#xff0c;怎么样去做&#xff1f;你要把特效、悬…

PCL 生成空间圆点云

目录 一、算法原理二、代码实现三、结果展示一、算法原理 三维空间圆形式如下: 三维空间圆的参数方程: { x ( θ ) = c

蚂蚁核心架构师内部Java并发编程进阶笔记,白嫖简直太香了!

并发编程作为Java开发者很重要以及非常核心的知识&#xff0c;我希望读者朋友具备以下的预备知识&#xff1a; 希望你不是一个初学者线程安全问题,需要你接触过Java Web开发、Jdbc 开发、Web服务器、分布式框架时才会遇到基于JDK8 ,最好对函数式编程、lambda 有一定了解采用了…

thinkphp使用dompdf导出pdf(html转pdf)

目录一 、安装二、安装字体&#xff08;解决无法输出中文&#xff09;三、使用3.1 示例3.2 入参声明3.3 调用声明四、总结一 、安装 命令行安装&#xff1a; composer require dompdf/dompdf下载 GitHub Dompdf库 二、安装字体&#xff08;解决无法输出中文&#xff09; 因…

关于内存条的知识要点⑴

这些天在安装神州网信政府版的过程中&#xff0c;遇到很多计算机配置比较低&#xff0c;比如2009、2010、2012年的计算机&#xff0c;为了让用户使用顺畅一些&#xff0c;需要做一些硬件上的更改&#xff0c;比如加装内存条或者更换固态硬盘等。很多人即使是写代码的IT技术人员…

599. 两个列表的最小索引总和

599. 两个列表的最小索引总和https://leetcode.cn/problems/minimum-index-sum-of-two-lists/ 难度简单224 假设 Andy 和 Doris 想在晚餐时选择一家餐厅&#xff0c;并且他们都有一个表示最喜爱餐厅的列表&#xff0c;每个餐厅的名字用字符串表示。 你需要帮助他们用最少的索…

计算机毕业论文选题java毕业设计软件基于SSM实现的固定资产管理系统

&#x1f345;文末获取联系&#x1f345; 目录 一、项目介绍 二、开题报告 三、截图 四、源码获取 一、项目介绍 计算机毕业设计java毕设之固定资产管理系统_哔哩哔哩_bilibili计算机毕业设计java毕设之固定资产管理系统共计2条视频&#xff0c;包括&#xff1a;IT实战营…

【文献研究】国际班轮航运的合作博弈:The coopetition game in international liner shipping

背景&#xff1a;本人在整理资料时翻找出来的以前做的研究自己写的总结&#xff0c;2017年发布在《Maritime Policy & Management》期刊的一篇关于国际班轮航运合作博弈的英文文献&#xff0c;本人本着学习的目的就文献的重点内容进行了浅层次的解读&#xff0c;就自己的理…

技术状态管理计划-模板

1 引言 1.1 目的和范围 本计划规定了XXX项目技术状态管理的原则、主要内容和要求&#xff0c;是指导XXX项目以及技术状态项研制全过程的技术状态管理的基本文件&#xff0c;也是各配套研制单位在研制过程中实施技术状态管理必须遵循的基本规定。   本计划适用于XXX项目以及技…

JdbcTemplate操作数据库

文章目录一、JdbcTemplate&#xff08;概念和准备&#xff09;1、什么是JdbcTemplate2、准备工作二、JdbcTemplate操作数据库(增删改)1、对应数据库创建实体类2、编写service和dao3、测试类三、JdbcTemplate操作数据库&#xff08;查询&#xff09;1、对应数据库创建实体类2、编…

物联网开发笔记(7)- 使用Wokwi仿真ESP32开发板实现LED灯点亮、按钮使用

上面几节我们使用Micrpython在Wokwi网站上实现了树莓派Pico开发板的仿真。学习了树莓派Pico的LED闪灯、按键操作等。以及Wokwi的使用&#xff0c;比如选中元器件后&#xff0c;按键盘“R”键切换方向&#xff0c;按键盘“Backspace”或者“Delete”删除原件&#xff0c;鼠标滚轮…

22-09-02 西安 JVM 类加载器、栈、堆体系、堆参数调优、GC垃圾判定、垃圾回收算法

JVM入门 1、JVM结构图 JVM是运行在操作系统之上的&#xff0c;它与硬件没有直接的交互 方法区&#xff1a;存储已被虚拟机加载的类元数据信息(元空间) 堆&#xff1a;存放对象实例&#xff0c;几乎所有的对象实例都在这里分配内存 虚拟机栈(java栈)&#xff1a;虚拟机栈描述…

深挖全媒体多模态数据价值,蜜度亮相2022世界人工智能大会

蜜度深度挖掘全媒体多模态数据核心价值&#xff0c;提供重要垂直领域解决方案。 编辑 | 宋慧 出品 | CSDN云计算 2022 年 9 月1至3日&#xff0c;由国家七部委和上海市人民政府共同主办的2022世界人工智能大会&#xff08;WAIC )隆重举行&#xff0c;大会围绕“人类、科技、产…

Qt开发及建立工程

Qt开发 ​ 内容摘要&#xff1a;文章主要是为初学者介绍 Qt 框架的一些基本特性&#xff0c;主要内容包括: Qt的特点 , Qt中的模块划分 , Qt的安装 , Qt项目文件介绍 , Qt中的窗口类 , Qt窗口的坐标体系 , Qt框架的内存回收机制。 文章中除了关于知识点的文字描述&#xff0c;…

神经网络模式识别方法,神经网络模式识别代码

为什么Matlab神经网络里面会有聚类分析&#xff0c;模式识别&#xff0c;还有fitting tools&#xff0c;神经网络和聚类、模式有区别吗&#xff1f; 我的理解是神经网络可以用于预测&#xff0c;模式识别&#xff0c;聚类&#xff0c;fittingtools是MATLAB自带工具箱模式识别与…

安利一个查题功能的接口系统

安利一个查题功能的接口系统 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 题库&#xff1a;题库后台&#xff08;点击跳转&…

Linux 网络配置

&#xff08;win&#xff09;查看网路IP和网关&#xff1a;ipconfig 查看Linux的网络配置&#xff1a;ifconfig 测试主机之间是否连通&#xff1a;ping IP Linux 网络配置方案 一&#xff1a;自动获取IP&#xff08;IP不固定&#xff09; 第一步&#xff1a;点击右上角 点击…

雪上加霜,运维部门裁员后,中了勒索病毒……

逼哭一个运维人的不是做不完的变更&#xff0c;也不是处理不完的故障&#xff0c;而是与勒索病毒的“不期而遇”。 A公司运维人员小明上班路上听新闻&#xff1a;“近日&#xff0c;新型勒索病毒.locked来势汹汹&#xff0c;国内多家企业中招......”&#xff0c;没想到这种事情…

(附源码)springboot宠物医疗服务网站 毕业设计688413

宠物医疗服务网站的设计与实现 摘 要 在信息飞速发展的今天&#xff0c;网络已成为人们重要的信息交流平台。宠物服务公司每天都有大量的信息需要通过网络发布&#xff0c;为此&#xff0c;本人开发了一个基于B/S&#xff08;浏览器/服务器&#xff09;模式的宠物医疗服务平台。…

极简idea下git操作(一)

git是现今公司项目中用的最多的代码版本管理工具&#xff0c;而idea是java中用的最多的开发工具&#xff0c;idea就像一把瑞士军刀&#xff0c;里面集成了很多开箱即用的功能&#xff0c;其中就包括了git,今天我们来记录下平时开发中常用的git操作。 从代码库中拉项目 我们刚…