HDU 2196--Computer(树形dp)

HDU--2196---Computer(树形DP) 这道题还是比较不容易理解的主要是多用了一个dfs,多饶了一个弯这道题符合树形DP的特征,可以把问题转化为一棵树对于每一个点,计算出以此点为根的子树中的第一长的枝和第二长枝,都存起来这是一个相当重要的预处理当图转为树的时候,对于每一个点其最远点有两种情况(两种情况取最优)1.返回父节点,来寻找最远点2.直接继续向下找,找到最远点对于第二种情况,由于向下找,长度必定为其最长枝的长度,预处理中已经找到, 阅读详情

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

题意:给一棵树,每条树边都有权值,问从每个顶点出发,经过的路径权值之和最大为多少?每条树边都只能走一次,n <= 10000,权值<=10^9。

分析:第一次DFS求出所有节点在他的子树范围内到叶子节点距离的最大值和第二大的值,第二次DFS更新从父节点过来的情况就可以了。因为如果只存最大值的话,判断一个点的从父节点过来的最大值,那么如果他的父节点存的最大值正好是从该点过来的,那么就失去了从父节点过来的状态,所以要记录最大的两个值。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <map>
#include <queue>
#include <cmath>
#include <stack>
#include <set>
#include <vector>
#include <climits>
using namespace std;
struct edge
{
    int x,len,sec;
    edge(int a,int b):x(a),len(b),sec(0){};
};
vector<edge> data[10005];
int vis[10005],dp[10005];
void dfs1(int rt)
{
    vis[rt]=1;
    for(int i=0;i<data[rt].size();i++)
    {
        int x=data[rt][i].x;
        int len=data[rt][i].len;
        if(!vis[x])
        {
            dfs1(x);
            int tmp=dp[x]+len;
            if(tmp>dp[rt])
                dp[rt]=tmp;
            data[rt][i].sec=tmp;
        }
    }
}
void dfs2(int rt)
{
    for(int i=0;i<data[rt].size();i++)
    {
        int x=data[rt][i].x;
        if(!vis[x])
        {
            int cur=0;
            vis[x]=1;
            for(int j=0;j<data[rt].size();j++)
            {
                if(data[rt][j].x!=x)
                {
                    cur=max(cur,data[rt][j].sec);
                }
            }
            for(int j=0;j<data[x].size();j++)
            {
                if(rt==data[x][j].x)
                {
                    data[x][j].sec=cur+data[x][j].len;
                    break;
                }
            }
            for(int j=0;j<data[x].size();j++)
                dp[x]=max(dp[x],data[x][j].sec);
            dfs2(x);
        }
    }
}
int main()
{
    // freopen("in.txt","r",stdin);
    // freopen("out.txt","w",stdout);
    int n;
    while(cin>>n&&n)
    {
        for(int i=1;i<=n;i++)
        {
            vis[i]=0;
            dp[i]=0;
            data[i].clear();
        }
        for(int i=2;i<=n;i++)
        {
            int a,b;
            scanf("%d%d",&a,&b);
            data[i].push_back(edge(a,b));
            data[a].push_back(edge(i,b));
        }
        dfs1(1);
        for(int i=1;i<=n;i++)
        {
            vis[i]=0;
        }
        dfs2(1);
        for(int i=1;i<=n;i++)
        {
            printf("%d\n",dp[i]);
        }
    }
    return 0;
}
Fluent 中多相流模型全面解析 3.颗粒或液滴在连续相中的运动:若关注颗粒或液滴在连续相中的运动轨迹、分布规律以及与连续相的相互作用,如喷雾干燥、气力输送等过程,Eulerian-Lagrangian 模型则是最佳选择。Eulerian-Eulerian 模型可以准确模拟气体在固体颗粒中的流动情况,包括颗粒的流化状态、气体与颗粒之间的传热传质过程,为气固流化床的优化设计和操作提供依据。通过该模型,可以了解混合器内不同位置的混合程度、颗粒的运动轨迹以及液固相间的相互作用,从而改进混合器的结构和操作条件,提高混合效率。 阅读详情

相关推荐

Workbench下列车转向架随机振动疲劳分析

结果中添加功率谱响应工具(Response PSD Tool),可以查看几何体以及远程点上的功率谱密度,如下图11所示,这里查看几何体上某一硬点的加速度功率谱密度响应曲线,如下图12所示。结果中添加疲劳工具(Fatigue Tool),查看列车转向架的疲劳寿命情况,这里采用窄带的寿命假设理论,曝光时间为1s指明计算出的疲劳寿命的基本单位是秒,寿命结果如下图14所示,可以看到最大寿命为1e35s,最小寿命为2.3542e18s,注意单位制,可再次基础上将其转换为小时或天。频域上的统计计算,软件很快计算完成。

ansysxuexizhe的博客 2605

hdu2196Computer【树形dp】

题目:hdu2196Computer点击打开链接 题意:给出yixie

大神养成中..... 3026

如何处理NC数据?(Python和IDL语言实现)

如何处理NC数据?(Python和IDL语言实现) NetCDF(network Common Data Form)网络通用数据格式是一种面向数组型并适于网络共享的数据的描述和编码标准。目前,NetCDF广泛应用于大气科学、水文、海洋学、环境模拟、地球物理等诸多领域。用户可以借助多种方式方便地管理和操作 NetCDF 数据集。(参考自:https://zhuanlan.zhihu.com/p/129351199) 在我看来,nc和hdf有异曲同工之妙,我用的数据以hdf结构为主(HDF:层次文件格式,相当于

zhanglingfeng1的博客 4637

HDU - 2196 Computer (树形dp详解)

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 one of settled earlier. Ma...

dsaghjkye的博客 358

告别编译报错!手把手教你用VS2022命令行编译curl静态库(附完整测试代码)

本文详细介绍了如何在VS2022环境下通过命令行编译curl静态库,从环境准备、编译实战到项目集成,提供了完整的避坑指南和测试代码。特别针对常见的编译报错如LNK2019等给出了具体解决方案,帮助开发者高效完成网络库的静态编译与集成。

weixin_42557803的博客 448

SPMI、PMBus、AVSBus:三大电源管理总线对比与选型指南

在现代电子系统中,电源管理是确保高性能与低功耗平衡的核心技术。其原理在于通过数字通信协议,实现电源管理单元(PMIC)与用电芯片间的精准“对话”,从而动态调整供电。这项技术的核心价值在于提升系统能效、增强可靠性并简化设计。其应用场景广泛,从智能手机、服务器到汽车电子无处不在。具体实现上,衍生出了三大主流协议:为移动嵌入式高度集成的SPMI总线、专注于工业标准监控的PMBus总线,以及追求极致实时能效的AVSBus总线。理解SPMI在复杂时序控制与PMBus在标准化配置方面的异同,是进行电源架构选型与调试的关

ithome 457

HDU 2196 Computer(树形dp经典)

题意: 给出一棵树,求离每个节点最远的点的距离 思路: 代码: /**========================================== * This is a solution for ACM/ICPC p

D_Double's Journey 1万+

ADI恒流驱动芯片LT3763调试心得(25A恒流驱动)

看似很简单的一个电路,调了好几版硬件,中间还出现过一个插曲,就是电感,我用的是27A,1.5uH的,贴片封装,由于频繁试板,电感来回用热风枪拆了3次,结果上电空载到3A都没有问题,但是以上10A以上,就出现烧LT3763和mos的情况,一连烧了8片,搞得有点怀疑人生,一度觉得我的电路设计有问题,邮件咨询ADI的FAE后,确认电路设计没有问题。1、大功率同步整流的Nmos管都是取不同的型号,就是厂家推荐的主开关管和续流管的型号往往都不一样,这个里面有什么讲究,我没有整明白,暂时也不需要弄明白。

liming98lm的博客 3921

Computer(HDU-2196)

Problem Description 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 one ...

Alex_McAvoy的博客 810

使用 SAP 自家的 AI 工具 Joule 辅助 SAP Fiori 应用开发

SAP Joule 不请自答,解释说标记了接口的 UI Component,具备进行异步内容创建的能力,比如其通过 rootView 分配的视图,在运行时可以异步创建。目前 SAP Business Application Studio 里的 SAP Joule 支持下面这八种上下文,绝大部分都和 SAP UI5 开发相关,剩下的则是代码仓库和 SAP 帮助文档的搜索。SAP Joule 回答的大意是:我只负责回答 SAP UI5 开发相关的问题,不要和我扯其他有的没的。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1096

日常工作记录---在虚拟机中进行slam建图

   今天是10月24号,首先祝各位程序员们节日快乐!!!    最近一周由于实习的原因,对ROS的探索学习,停滞了一段时间,所以今天也就没什么大的进展,本篇文章仅仅记录一下,我在虚拟机中进行slam建图可行性验证的过程,本篇文章同样使用古月学院《如何在Gazebo中实现阿克曼转向车的仿真》的课程资料来进行验证    下面各条之间并没有严格的顺序关系,每一条都是独立的,都是我在验证过程中的经验或者记录:    1、在运行roslaunch bringup racecar_gazebo_rviz.lau

慕羽★的博客 4829

HDU - 2196 Computer 【树形dp必做题?】

传送门 //就是输出每个点的最远距离. 其实我来写首先会有树的直径, 那么就变得很简单了, 但是都说树形dp必做, 那么就用树形dp来好一点. dp[maxn][3]; dp[u][0] 代表u的子树下距离u最远的距离是多少. dp[u][1]代表u的子树下距离u 次 远的距离是多少. dp[u][2] 代表经过u的父亲最远可以到达的距离. 所以转移方程方程就是:

Anxdada -- 我等风来也等你 674

从零搭建实时数仓:基于Flink+ClickHouse的实践

实时数据处理和实时数据查询。市场上的技术方案众多,为何选择Flink+ClickHouse?

AIGC应用创新大全的博客 1320

HDU2196.Computer(树形DP)

HDU2196.Computer(树形DP) 题目传送门 思路:每个结点的最大距离转化为到子树结点的最大距离与到上部最大的距离的较大值。到上部最大距离要分两种情况(在最长距离子树上和不在最长距离子树上)通过两次DFS就可完成状态转移。具体看代码。 AC代码: #include<bits/stdc++.h> using namespace std; const int N=1e5+5; ...

Harris-H的博客 579

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

计算机控制技术及应用

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

Hdu2196-Computer (树形dp)(经典题)

传送门:Computer 题意:有 n 个点,通过 n-1 条边连成一棵树,每条边有一个权值,求从每个点出发的简单路径的最大长度。 思路:树形dp 首先以 1 为根建树,这样每个点能走的最大路径有两种情况:往下沿着子节点走或往上沿着父结点走。假设根节点为 rt,我们定义: dp[rt][0] 表示以 rt 为根的子树上的节点到 rt 的最长距离。 dp[rt][1] 表示以 rt 为根的...

Stupid_Turtle的博客 718

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

HDU 2196 Computer(树形DP经典入门题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2196 解题思路: 先思考一下暴力的方法: 建树(双向建边),如果有n个点,每次选择那个点作为根节点,dfs,记录最深深度 这样的话n个点,每次dfs遍历剩下n-1的点,复杂度O(N²),我试了一下,超时了。 于是我去参考了一下大佬的代码,发现了树形DP这样的东西。 树形DP做法...

shadiao.的博客 345

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

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

L - Computer(HDU2196 ,树形DP,换根法)

L - Computer(HDU2196 ,树形DP,换根法) 题目 :传送门 思路见注释 代码 : * 换根法dp: 先把无根树化为有根树 第一遍dfs,对于顶点u,求u的子树到u的最大和次大距离 第二遍dfs,将树化为顶点u为根,u的子树到u的最大距离和次大距离 对于u的最大距离就是res[u],而u的次大距离是用来儿子换根的时候进行状态转移 */ #include<bits/s...

Dch19990825的博客 328

HDU2196 Computer 树形DP

但以2为例,他的反方向最大就不能再从1->2这个路径找了,应该从1->3这个路线开始找,即次大值。也就是说,我们需要获得当前点的正距离最大值和正距离最大值的终点(上图5到6),这个情况我们直接从根往下遍历就好了。故令f[i][j]表示为结点j的最大正向(i=0)、次大正向(i=1)与最大反向(i=2)要找次大值得话,显然我们记录最大值的终点是不方便的,应该记录走到最大值那条路线的子节点。既然要查找每个节点的最远到达距离,由于该图是个树,我们就找从。另外,根节点的正向最大路线与反向最大路线是一样的。

2301_79917474的博客 416

HDU 2196 Computer(树形dp)

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

鱼香rose_的博客 1643

hdu 2196 Computer 树形dp

HDU 2196 Computer 题目传送门 题目大意:一开始有一台电脑编号为1,然后接下来把剩下的电脑全连进去,每一行给出该台电脑的父亲编号和连接的权值,问最后每台电脑能到达最远的权值为多少。 分析:乍一看,很容易想到用dfs直接搜,然后分析对于每台电脑,我们将m电脑连入n电脑,相当于指向了n电脑,然后其他的电脑又可能连向m,发现每个点有出度和入度。那么我们就能想到他能到达的最远距离一定是出度...

yp0413170331的博客 178

HDU2196 Computer(树形dp)

题目链接 题意 在n个结点的树中,边有权值,找到每个结点到最远的结点的距离 解法 有两种解法,一种是利用树的直径,另一种是树形dp 我的做法是树形dp的。 对于一个节点i来说,他最长的距离可以是向它的子树方向走,也可以向父节走, 如果向父节点走还有可能向父节点的子树走,因此需要注意的是父节点的子树包含了自己的子树,父节点有两种情况,父节点最长的路径没有经过i点和经过i点,没有经过i点则直接加上i到...

Zain的博客 185

HDU-2196-Computer 树形DP

大致题意:每一台电脑和某些电脑相连,所有电脑构成了一颗树。现在,需要求每台电脑传送信息的最大距离,也就是到达叶子节点的最大距离。很经典的一道树形DP,大致思路:任选一个节点作为根节点,然后用DFS跑出每个节点向下的最大距离和次大距离。然后再进行一次dfs,找出每个节点向父节点可以走的距离,最后比较一下就是结果了。(解题过程不能说得太清楚了,略加提示,请仔细思考)。 #include<bi...

qq_43141496的博客 266

HDU2196 Computer(树形dp+换根)

原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=2196 题意:求一棵树中距离每一个节点的最大路径权值和。 思路:假如固定了起点,那么我们通过一遍dfsdfsdfs就可以得到距离根节点中最远的点的路径权值和,但是这题需要输出nnn个点的答案,显然对每一个点的跑一遍dfsdfsdfs是不可行的。所以需要进行优化。 可以使用一种换根的技巧,在预处理之后可以...

yiqzq的博客 474

【hdu】2196 Computer【树形dp】

题意: 给出一棵树,树上边的长度不同,问树上的每个节点到别的节点的最远距离是多少 题解: 树形dp的经典应用,一个节点b的最长距离有三种情况,1.来自他的子树2.与他父节点距离最大的节点+他与他父节点的距离 第二种情况分为两种3.是与他父节点距离最大的节点在以父节点为根的子树中4.来自以父节点为根的子树之外的树 上面3.中如果节点b在这条最长路中的话就不行了,所以我们还要记下父节点的第二

a709743744的博客 463

hdu 2196 Computer(DP-树形DP)

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

不戚的专栏 703
上一篇: HDU 4003--Find Metal Mineral(树形dp)
下一篇: POJ 1155--TELE(树dp+背包)
Xcockroach
博客等级 码龄14年 4粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值