HDU 2196 Computer(树形dp)

news2024/11/18 19:13:21

H D U 2196 C o m p u t e r (树形 d p ) \Huge{HDU 2196 Computer(树形dp)} HDU2196Computer(树形dp

文章目录

  • 题意
  • 思路
  • 标程

题目链接:Problem - 2196 (hdu.edu.cn)

题意

给出一个n个节点的无根树,求每个节点所能到达的最远距离。

img

思路

  • 本题解思路为树形dp思路。
  • 注意题目的输入要求。
  • 题目为多实例!

跟据二叉树的定义,每个节点至多有一个父节点(只有根节点没有),我们会发现每个节点能够到达的最远距离只有下图两种情况。

在这里插入图片描述

那么我们可以先通过一次dfs,从叶节点向上返回;记录每个节点的子节点中的最大路径长度次大路径长度,因为会出现图片中①的情况。

然后再通过一次dfs,从根节点向下遍历;找出每个节点的最大反向路径长度,对应的是图片中的②情况。

对于最大路径长度次大路径长度最大反向路径长度,我们可以用 d p [ i ] [ j ] , j ∈ ( 0 , 1 , 2 ) dp[i][j],j\in(0,1,2) dp[i][j],j(0,1,2)来记录每个节点的状态。

在第二次dfs的过程中,我们可以对每个节点的子节点进行状态转移,状态转移方程为:
{ d p [ 2 ] [ s o n ] = m a x ( d p [ 2 ] [ f a t h e r ] , d p [ 1 ] [ f a t h e r ] + w e i g h t )     s o n 为 f a t h e r 子节点中的最大路径 d p [ 2 ] [ s o n ] = m a x ( d p [ 2 ] [ f a t h e r ] , d p [ 0 ] [ f a t h e r ] + w e i g h t )     s o n 不为 f a t h e r 子节点中的最大路径 \begin{cases} & \text dp[2][son] = max(dp[2][father], dp[1][father]+weight) ~~~ son为father子节点中的最大路径\\ & \text dp[2][son] = max(dp[2][father], dp[0][father]+weight) ~~~ son不为father子节点中的最大路径 \end{cases} {dp[2][son]=max(dp[2][father],dp[1][father]+weight)   sonfather子节点中的最大路径dp[2][son]=max(dp[2][father],dp[0][father]+weight)   son不为father子节点中的最大路径
其中 0 , 1 , 2 0,1,2 0,1,2分别对应的是最大路径长度次大路径长度最大反向路径长度

最后每个节点能够到达的最远距离即为: m a x ( d p [ 0 ] [ i ] , d p [ 2 ] [ i ] ) max(dp[0][i], dp[2][i]) max(dp[0][i],dp[2][i])

标程

const int N = 10000 + 10; 

struct Edge {int to, weight;};  // 边
vector<vector<Edge>> tree;      //用于存储树的结构
int n, dp[3][N], id[N];

void dfs1(int x, int y) {
    for(auto i : tree[x]) {//正向最大距离
        if(i.to == y) continue;
        dfs1(i.to, x);
        if(dp[0][x] < dp[0][i.to] + i.weight) {
            dp[0][x] = dp[0][i.to] + i.weight;
            id[x] = i.to;
        }
    }
    for(auto i : tree[x]) {//正向次大距离
        if(i.to == y) continue;
        if(id[x] == i.to) continue;
        dp[1][x] = max(dp[1][x], dp[0][i.to] + i.weight);
    }
}

void dfs2(int x, int y) {
    for(auto i : tree[x]) {//反向最大距离
        if(i.to == y) continue;
        if(i.to == id[x])
            dp[2][i.to] = max(dp[2][x], dp[1][x]) + i.weight;
        else
            dp[2][i.to] = max(dp[2][x], dp[0][x]) + i.weight;
        dfs2(i.to, x);
    }
}

void init() {
    tree.clear(); tree.resize(n + 1);
    memset(dp, 0, sizeof dp);
    memset(id, 0, sizeof id);
}

void Solved() { 
    while(cin >> n) {
        init();
        for(int i = 2; i <= n; i ++ ) {
            int x, y; cin >> x >> y;
            tree[x].push_back({i, y});
            tree[i].push_back({x, y});
        }
        dfs1(1, -1); dfs2(1, -1);

        for(int i = 1; i <= n; i ++ ) {
            cout << max(dp[0][i], dp[2][i]) << endl;
        }
    }
}

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

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

相关文章

go webview/wails学习记录

文章目录 webview安装基础代码错误情况wails安装初始化一个项目错误信息使用arco-design(在初始化项目上修改代码)修改窗口图标多页面展示添加自定义图标-iconfont制作伸缩侧边栏侧边栏菜单在form中使用select且select联动选择使用go读取本地excel文件在转json_str使用go将json…

怎么把电脑上的文件传到手机上?可保存文档的云笔记

在职场中&#xff0c;我们经常需要将电脑上的重要文件、资料传到手机上&#xff0c;以便随时查阅和使用。比如&#xff0c;当你在公司完成了一份关键报告&#xff0c;但即将外出与客户沟通&#xff0c;这时如果能将报告传到手机上&#xff0c;就能在移动中随时准备应对客户的咨…

5.22-wjn

使用select实现的TCP并发服务器端 #define SER_PORT 8888 #define SER_IP "192.168.125.158" int main(int argc, const char *argv[]) {//1、为通信创建一个端点int sfd socket(AF_INET, SOCK_STREAM, 0);//参数1&#xff1a;说明使用的是ipv4通信域//参数2&#…

Oracle的安装以及一些相关问题

系列文章目录 Oracle的安装以及一些相关问题 文章目录 系列文章目录前言一、Oracle的安装二、常用命令三、误删dbf四、PLSQL乱码五、oracle更换数据库字符集总结 前言 一段时间没更新&#xff0c;主要最近一直在找工作&#xff0c;最终还是顺着春招找到工作了&#xff0c;现在…

【基础篇-Day8:JAVA字符串的学习】

目录 1、常用API2、String类2.1 String类的特点2.2 String类的常见构造方法2.3 String类的常见面试题&#xff1a;2.3.1 面试题一&#xff1a;2.3.2 面试题二&#xff1a;2.3.3 面试题三&#xff1a;2.3.4 面试题四&#xff1a; 2.4 String类字符串用于比较的方法2.5 String类字…

文生图模型演进:AE、VAE、VQ-VAE、VQ-GAN、DALL-E 等 8 模型

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 合集&#x…

【idea】IDEA 设置自动导入类 / 包等信息(import)

如果大家正在使用一个未曾导入&#xff08;import&#xff09;过的类&#xff0c;或者它的静态方法或者静态字段&#xff0c;IDEA 会给出对应的建议。需要手动操作导入类。 以下设置可以自动导入

磁珠笔记汇总

磁珠笔记汇总 磁珠是和电感很相似的器件。 电感磁珠单位亨(H)欧姆(Ω)是否储能存储能量消耗高频能量应用场景通常用于开关电源吸收高频&#xff0c;EMC保护如何看待损耗使用电感时希望损耗越小越好使用磁珠时是利用其损耗来消耗不需要的高频分量 一、磁珠的工作原理 磁珠与…

第十三届蓝桥杯国赛大学B组填空题(c++)

A.2022 动态规划 AC; #include<iostream> #define int long long using namespace std; int dp[2050][15]; //dp[i][j]:把数字i分解为j个不同的数的方法数 signed main(){dp[0][0]1;for(int i1;i<2022;i){for(int j1;j<10;j){//一种是已经分成j个数,这时只需每一个…

unbantu安装ollama,maxkb

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 背景一、Ollama安装1.安装2.安装后检验3.运行模型4.常用命令 二、安装maxkb1.说明2.docker安装maxkb2.添加模型3.创建应用4.api域名无效 三、总结 背景 最近在学习…

zabbix监控mysql

一、mysql数据库监控的内容有 mysql的吞吐量 mysql的常规操作&#xff08;增删改查&#xff09; QPS&#xff08;Questions Per second:&#xff09;每秒能处理多少次请求数 TPS&#xff08;Transactions Per Second&#xff09;每秒查询处理的事务数 mysql库大小和表大小 监控…

2024年新算法-红嘴蓝鹊优化器(RBMO)优化BP神经网络回归预测

2024年新算法-红嘴蓝鹊优化器(RBMO)优化BP神经网络回归预测 亮点&#xff1a; 输出多个评价指标&#xff1a;R2&#xff0c;RMSE&#xff0c;MSE&#xff0c;MAPE和MAE 满足需求&#xff0c;分开运行和对比的都有对应的主函数&#xff1a;main_BP, main_RBMO, main_BPvsBP_R…

Mysql 单行转多行,把逗号分隔的字段拆分成多行

一、拆分前后的数据 二、执行SQL select substring_index(substring_index(a.gzlx,,,b.help_topic_id1),,,-1) gzlxname, a.gzlx,a.* from dt_task_zxgz_info a join mysql.help_topic b on b.help_topic_id < (length(a.gzlx) - length(replace(a.gzlx,,,))1) 三、解释说…

爷爷看了都会,打工人必备的摸鱼AI神器!免费!

去年&#xff0c;AI技术无疑成为了最为引人注目的焦点&#xff0c;层出不穷的创新应用令人目不暇接。尽管许多人对这股AI热潮的持久性持怀疑态度&#xff0c;但现实却用事实给予了最有力的反驳。AI所展现出的强大生产力&#xff0c;足以令人刮目相看。 而今年以来&#xff0c;…

【实用的 IDEA 配置和操作技巧总结】

前置知识 IDEA的设置快捷键为ctrlalts键&#xff0c;后文介绍IDEA常见的配置就不再赘述这一点了。 基础配置 取消默认打开上次项目 日常开发都会打开不同的项目&#xff0c;初次安装IDEA之后&#xff0c;每次打开IDEA都会开启上一次启动的项目&#xff0c;所以我们需要进入设…

Android studio sdk 虚拟机无法打开运行

1.确认是否在BIOS开启硬件虚拟化支持,选择Enable 2.win8/win10 Hyper-V冲突。控制面板-》程序与功能-》windows功能-》关闭 Hyper-V 3.sdk 路径非默认路径 复制avd C:\Users\Administrator\.android\avd 到 sdk的安装路径下 D:\Android\sdk 。重启软件重新启动即可

Spring:事务

1. 简介 spring对jdbc进行封装&#xff0c;简化对数据库的操作 2. HelloWorld 1. 搭建模块 2.加入依赖 <dependencies><!--spring jdbc Spring 持久化层支持jar包--><dependency><groupId>org.springframework</groupId><artifactId>s…

香橙派 AIpro开发板初上手

一、香橙派 AIpro开箱 最近拿到了香橙派 AIpro&#xff08;OrangePi AIpro&#xff09;&#xff0c;下面就是里面的板子和相关的配件。包含主板、散热组件、电源适配器、双C口电源线、32GB SD卡。我手上的这个是8G LPDDR4X运存的版本。 OrangePi AIpro开发板是一款由香橙派与华…

MySQL详细安装、配置过程,多图,详解

本文适合centos7环境下安装mysql&#xff0c;在安装和卸载过程中&#xff0c;都在root用户下完成。文章目录 清理环境获取mysql官方yum源安装mysql yum源安装mysql服务安装报错解决办法验证是否安装完成启动mysql服务登录服务方法一&#xff1a;方法二&#xff1a;方法三&#…

工商银行异地卡兑换泰铢的流程

本文介绍在国内的工商银行&#xff0c;通过现金或银行卡兑换泰国铢等外国货币的纸币或硬币的方法。 最近&#xff0c;准备到泰国旅行&#xff0c;所以需要兑换一些泰铢&#xff0c;防止下飞机到当地后找不到汇率合适、兑换方便的换钱的地方。其中&#xff0c;因为对比发现工商银…