HDU2196 - Computer(树的直径+DP)

Lm317电压源芯片制作电流源 还在找电流源芯片么?如何使用电压源芯片快速搭建电流源。 阅读详情

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=2196


题目大意:

给定一个无向连通无环图,求每个节点到达的最远的节点的距离。


解题过程:

上午看了一下DP进阶之路的PDF,突然想学树型DP。然后找到了这个题,之前做了一个POJ的BFS求树的直径的,这次再来一发DP的。


题目分析:

由于题目给的是无向连通无环图,这里构造出一颗树来,不妨假设节点 1 为根。

那么对于任意一个节点,他能到达的最远的节点一定是他子树中的一个节点,或者经过他父亲到达的一个节点。

这里可以经过一次DFS求出每个节点到他子树中最远的节点的距离。

然后第二次DFS的时候求出每个节点经过他根节点能到达的最远的距离,求经过根节点能到达的最远的距离时,需要当前节点到根节点的距离加上根节点到最远的节点的距离。不过要注意的是,可能当前节点在根节点最远距离的路径上。

这里解决的方法是,求出每个节点最远的距离和次远的距离,如果当前节点在最远的距离路径上那么就选择次远的距离,判断是否在路径上需要记录下最远的距离是由那个儿子求出来的。


AC代码:

#include <bits/stdc++.h>
using namespace std;

const int MAX = 11234;
const int INF = 0x3f3f3f3f;

int n;
vector<pair<int, int> > edge[MAX];

//dis1记录最远距离,dis2记录次远距离,num用来标记最远距离由那个节点而来的
int num[MAX], dis1[MAX], dis2[MAX], dp[MAX];


void read() {
    for (int i = 1; i <= n; i++) {
        edge[i].clear();
    }
    memset(dp, 0, sizeof(dp));
    for (int i = 2; i <= n; i++) {
        int v, w;
        scanf("%d %d", &v, &w);
        edge[v].push_back(make_pair(i, w));
    }
}

void dfs1(int u) {
    dis1[u] = 0;
    //这里的含义是,对于每个节点求他所有儿子节点的最远距离,那么当前节点的最远距离就是到儿子节点的距离加上儿子节点的最远距离
    //显然对于一个叶子节点,最远距离是0
    for (int i = 0; i < edge[u].size(); i++) {
        int v = edge[u][i].first;
        int w = edge[u][i].second;
        dfs1(v);
        if (dis1[v] + w > dis1[u]) {
            dis1[u] = dis1[v] + w;
            num[u] = v;
        }
    }
    //和上一步相似,求次远距离
    dis2[u] = -INF;
    for (int i = 0; i < edge[u].size(); i++) {
        int v = edge[u][i].first;
        int w = edge[u][i].second;
        //当前距离不能是最远距离
        if (v != num[u] && dis1[v] + w > dis2[u]) {
            dis2[u] = dis1[v] + w;
        }
    }
}

void dfs2(int u) {
    for (int i = 0; i < edge[u].size(); i++) {
        int v = edge[u][i].first;
        int w = edge[u][i].second;
        //dp[u]的含义是,当前节点经过父节点能到达的最远的距离
        //如果当前节点在最远距离的路径上,那么用次远距离,否则用最远距离
        if (v == num[u])
            dp[v] = max(dp[u], dis2[u]) + w;
        else
            dp[v] = max(dp[u], dis1[u]) + w;
        dfs2(v);
    }
}

void go() {
    dfs1(1);
    dfs2(1);
    //输出每个点的最远距离
    for (int i = 1; i <= n; i++) {
        printf("%d\n", max(dp[i], dis1[i]));
    }
}

int main() {
    while (~scanf("%d", &n)) {
        read();
        go();
    }
}
YOLOv12改进策略【Neck】| 使用CARAFE轻量级通用上采样算子 CARAFE内容感知的特征重新组合。 阅读详情

相关推荐

miRNA测序数据生信分析——第二讲,数据库下载整理

一个非编码RNA的整合数据库,可用来识别鉴定各种类型的ncRNA。提供的是ncRNA在基因组上的基因序列,而非转录成熟ncRNA的序列。最新版:2022-11-02Rfam数据库中ncRNA类型分三大类:Cis-reg和Gene和Intron。这三大类又有子类。一个提供包括miRNA序列数据、注释、预测基因靶标等信息的全方位数据库,是存储miRNA信息最主要的公共数据库之一。最新版:2018-12-01。

weixin_44616693的博客 4100

HDU2196(Computer 经典换根dp 求一棵树中所有节点能达到的最长距离)

题目 博主讲的很好:https://blog.youkuaiyun.com/u013480600/article/details/21831363 #include<bits/stdc++.h> #define en '\n' #define m(a,b) memset(a,b,sizeof a) using namespace std; typedef long long ll; const ...

qq_42576687的博客 518

无人驾驶之车辆控制(1)纯跟踪(Pure Pursuit)算法与Stanley算法

目录引言1 Pure Pursuit纯几何跟踪算法1.1 车辆运动学自行车模型1.2 算法原理1.3 仿真测试2 Stanley算法2.1 算法原理2.2 仿真测试3 总结 引言 本文对Pure Pursuit以及Stanley control两种算法进行了调研以及初步的性能摸底。 1 Pure Pursuit纯几何跟踪算法 1.1 车辆运动学自行车模型 运动学是从几何学的角度研究物体的运动规律,...

zxxxxxxy的博客 2万+

树形dp hdu 2196

题目链接:hdu 2196 题目大意:有n台电脑,每台电脑之间都用电缆相连,当然了这是n-1边树。然后问每台电脑所能到达的最远电脑的距离。 思路:首先第一反应思路有点像单源最长路径。。。但是有n台电脑,都来一发估摸着n^2logn的时间复杂度(果断t了)。后来想想又有点树的分治的感觉,分枝节处理,,,,然后dp优化。。。就可以了。。。。。。。。。。。。。。来一发dfs找到离1(之所以选1是因为...

weixin_30731305的博客 124

[终于解决]Ubuntu14.04 32位安装移动网卡(0bda:b711)驱动8188gu tplink-WN726n

大致梳理一下问题解决的流程 首先,在台式机做了双系统,台式机只有一个网线接口,由于项目要求,需要占用网口传输数据,所以用之前买的tplink-WN726n免驱版2.0的移动网卡 【note】免驱版只能在Windows下安装使用,在Ubuntu系统中无法使用,所以,需要另辟蹊径。 找了很多资料,尝试很多方法,有的复杂有的简单,终于解决。 【思路】首先在Ubuntu系统中输入lsusb,查看是否检测到USB网卡设备。然后从Github中复制代码,构建,安装,然后modprobe一下,到前面那步还不行,就再来一步

瑞o 1万+

S参数反演法

等效介质理论模型— 利用S参数反演法提取超材料结构的等效参数 等效介质理论模型—利用S参数反演法提取超材料结构的等效参数 S参数反演法,即利用等效模型的传输矩阵和S参数求解超材料结构的等效折射率n和等效阻抗Z的过程。本文对等效介质理论模型进行了详细介绍,并提供对应代码。 超材料的传输矩阵 超材料结构的传输矩阵函数为: 其中,d 为等效光学活性材料的厚度,n 为折射率,Z 表示阻抗。 S参数和传输矩阵T 超材料结构的S参数和传输矩阵T满足下列方程: 利用以上两式,可以得到等效折射率n和相对阻抗的表达式

weixin_43962864的博客 1万+

HDU-2196 Computer(树dp)

题目:http://acm.hdu.edu.cn/showproblem.php?pid=2196 题意:给出一棵树,让求每个点能到达的最远距离 思路: dp[u][0]表示u的子树中所能达到的最远距离 dp[u][1]表示u的子树中所能达到的次远距离 dp[u][2]表示u的父亲结点所能达到的最远距离 难点是在求dp[u][2]上 代码:#include<bits/stdc++.h>

huatian5的博客 296

Hopfield神经网络(HNN)详解

Hopfield神经网络是一种比较特殊的网络,它不像一般的神经网络那样有输入层和输出层,并且通过训练来改变神经网络中的参数,最终实现预测、识别等功能。Hopfield网络只有一群神经元节点,所有节点之间相互连接,形式如下: 虽然有些文章会画出像深度神经网络那样有输入输出的图,并且输出后又返回输入,但本质上就是多个节点之间的全连接,也就是上面的图形。Hopfield神经网络主要有两个应用:一是起到类似储存器的作用,也就是我们把多个序列或图片输入这个网络,最终这个网络会以神经元之间连接权重的形式储存这

weixin_60737527的博客 4万+

hdu 2196 Computer(树形DP)

Computer Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3075 Accepted Submission(s): 1561 Problem Description A school bought the fi...

weixin_30576827的博客 272

一根网线,让整个公司断网,二层环路真实事故复盘

那天晚上 23:47,监控告警突然爆了。核心交换机 CPU 100%。ARP 表暴涨。广播流量飙升。业务系统集体超时。5 分钟后,全公司断网。运维群里一句话:“是不是黑客攻击?但老网工都知道,这种现象只有一种可能:二层环路。

网络技术联盟站 350

YOLOv11改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度

ASF-YOLO是一种基于YOLO的新颖框架,结合了空间和尺度特征以实现准确和快速的分割。其中,注意力尺度序列融合模块。

Limiiiing的博客 4391

Computer HDU - 2196 (树形dp || 树的直径)

Computer HDU - 2196 (树形dp || 树的直径) 题目链接 题目大意: 给定一棵树,知道相邻结点的距离,问对于每一个结点,和距离它最远的结点之间的距离是多少。 Input: 5 n个结点 1 1 表示2和1之间的距离是1 2 1 表示3和2之间的距离是1 3 1 表示4和3之间的距离是1 1 1 表示5和1之间的距离是1 ...

deerly_的博客 677

广州吉欧电子科技有限公司安卓开发工程师岗位 - 技术核心、职责详解与面试指南

广州吉欧电子科技有限公司招聘安卓开发工程师,该岗位可接收优秀应届生。岗位职责包括:1)负责安卓应用架构设计与开发,确保稳定性和可扩展性;2)功能模块编码实现与测试;3)性能优化与用户体验提升;4)后端接口对接;5)系统版本适配;6)用户反馈处理迭代;7)特殊要求熟悉RTK高精度定位技术原理及使用。该岗位要求扎实的安卓开发技术、良好的架构设计能力、性能优化经验,以及特定领域的RTK专业知识,是一个技术全面且具有专业特色的开发岗位。

郑伟强dev的专栏 154

【树形DP_树的直径】HDU 2196 Computer

HDU 2196 Computer 题意:给一棵树,求每个结点的最大距离(从该结点到达所有叶子结点中的最大距离)并输出。题目要求输入真的很迷,每一行(从2开始)代表的结点u和输入结点v之间的边的权值是w。嗐,真的迷。读了好久才读懂。QAQ 【今天才知道原来以下做法是求树的直径的做法,first[x] + upp[x]的最大值就是树的直径】 思路:我们任取一个结点作为根结点,将无根树转...

L_X_ 341

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

树形dp || 树的直径性质 hdu-2196 computer

Computer HDU - 2196 A school bought the first computer some time ago(so this computer's id is 1). During the recent years the school bought N-1 new computers. Each new computer was connected to on...

yhb的博客 219

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

hdu 2196 Computer(树的直径\树上dp)

题目链接 Computer Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 5702    Accepted Submission(s): 2854 Problem Description A schoo

fouzhe的博客 603

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

HDU - 2196 Computer (树形DP,树的直径相关)

???? ???? ???? 题意:求与每个点距离最远的点的距离 选择一个根,求出他向下和向上分别的最大值,两者再求一个最大值即可。 这里的DP也可以用在求直径上(树中存在负权的时候dfs/bfs不再适用), 把最后一步换成dp0与dp2求和即可 int n; int id[MX];//i结点的最深链在哪个儿子 ll dp[MX][3]; int head[MX],tot; struct IN{int v,w,...

欢迎光临 我的心 252

Hdu 2196 Computer (树的直径 或 树形DP)

貌似这题是树形DP的经典题,树形DPz

whyorwhnt的专栏 1016

hdu 2196 Computer 树形DP或者树的直径

Computer Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 5805    Accepted Submission(s): 2909 Problem Description A school bought t

swust_fang 603

HDU 2196 Computer (树型dp/树直径)

Computer Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 31005    Accepted Submission(s): 3895 Problem Description A school bought

HHH_go_的博客 389

Computer(HDU2196+树形dp+树的直径)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2196 题目: 题意:有n台电脑,每台电脑连接其他电脑,第i行(包括第一行的n)连接u,长度为w,问你每个节点能够连接的最远距离。 思路:树形dp,由于本题是一棵有根树(根节点为1),所以每个节点能到达的最远距离为max(从父亲节点往上传并到达根节点的其他子树的最远距离,从子节点...

di6499的博客 165

HDU 2196 Computer(树形dp+换根法+树的直径)

题意:给出一棵树,求离每个节点最远的点的距离 分析: 方法一:贪心做法,不会证明,找到直径的两个端点,分别dfs一下,求出两端到每个点分别的距离取最大值,树的直径作用很大啊。 方法二:把无根树转化成有根树分析,对于每个节点,维护所有以当前节点为根的子树中距当前节点最远的距离和次远距离,二次扫描(两遍dfs)。 参考:https://blog.youkuaiyun.com/shuangde800/art...

常胜将军的博客 658

hdu2196-树形dp|树的直径-Computer

http://acm.hdu.edu.cn/showproblem.php?pid=2196 给定一个网络,是一个图,求每个节点到最远节点的距离。。 1 树的直径。 即树上的最长简单路(最长的一条线)。然后求出直径的两个端点, 在计算的时候记忆化一下,保存一下他们距离 端点的距离。然后取最远的。( 1 先求出距离一个端点的距离,用直径直接减去是不行的,,因为有的点并不在树的直径上。。

天与云与山与水 397

「HDU-2196」Computer (树形DP、树的直径)

「HDU-2196」Computer 树形dp,树的最长路径(最远点对) 题意 给出一棵nn个结点的无根树,求出每个结点所能到达的最远点的距离。 解法 将无根树转成有根树,并进行两次DFS。 第一次DFS求出每个结点在其子树中的正向最大距离和正向次大距离,记为dp[0][x]和dp[1][x],并标记最长距离所对应的子结点id[i] ,利用id[i]能跳过最大点计算第二大的点; 此时可知...

橘嘉禾 149

HDU-2196 Computer(树的直径+DP)

ComputerTime Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 32752    Accepted Submission(s): 4667Problem DescriptionA school bought the first comput...

Amove 448

HDU2196 Computer (树形dp或树的直径)

题意 给定一个n个点的树,两点之间的距离定义为他们两点之间最短路经过的边数,问对于每个i,其它点距离i最远是多少(n小于等于100000) 题解 首先将这棵树转换为有根树 方法一:(利用树的直径) 求出这棵树的任意一条直径(u,v),然后dfs出u及v到其他任意一个点i的距离,那么对于每一个点,最长的距离是max{dist(u,i),dist(v,i)}max\{dist(u,i),

gankinghand的博客 397
上一篇: UVA11235 - Frequent values(游程编码+线段树)
下一篇: HDU1024 - Max Sum Plus Plus(DP+降维优化)
ACM_Fish
博客等级 码龄10年 69粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值