hdu2196Computer(树形dp)

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

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. Managers of school are anxious about slow functioning of the net and want to know the maximum distance Si for which i-th computer needs to send signal (i.e. length of cable to the most distant computer). You need to provide this information.


Hint: the example input is corresponding to this graph. And from the graph, you can see that the computer 4 is farthest one from 1, so S1 = 3. Computer 4 and 5 are the farthest ones from 2, so S2 = 2. Computer 5 is the farthest one from 3, so S3 = 3. we also get S4 = 4, S5 = 4.
 

Input
Input file contains multiple test cases.In each case there is natural number N (N<=10000) in the first line, followed by (N-1) lines with descriptions of computers. i-th line contains two natural numbers - number of computer, to which i-th computer is connected and length of cable used for connection. Total length of cable does not exceed 10^9. Numbers in lines of input are separated by a space.
 

Output
For each case output N lines. i-th line must contain number Si for i-th computer (1<=i<=N).
 

Sample Input
5 1 1 2 1 3 1 1 1
 

Sample Output
3 2 3 4 4
 

其实就是 递归的应用,不够看别人思路挺新颖的

  http://www.cnblogs.com/kuangbin/archive/2012/08/28/2659915.html


#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<set>
#include<map>

#define L(x) (x<<1)
#define R(x) (x<<1|1)
#define MID(x,y) ((x+y)>>1)

#define eps 1e-8
typedef __int64 ll;

using namespace std;

#define N 10005

int head[N],num,n;
int big[N],small[N];
int bigid[N],smallid[N];

struct stud{
  int to,len;
  int next;
}e[N*2];

inline void add(int s,int to,int len)
{
	e[num].to=to;
	e[num].len=len;
	e[num].next=head[s];
	head[s]=num++;
}

void dfs1(int x,int father)
{
	  big[x]=small[x]=0;
	  int i;
	  for(i=head[x];i!=-1;i=e[i].next)
	  {
		  int to=e[i].to;
	  	  if(to==father) continue;
	  	  dfs1(to,x);
	  	  if(big[to]+e[i].len>small[x])
		  {
		  	 small[x]=big[to]+e[i].len;
		  	 smallid[x]=to;
		  	 if(small[x]>big[x])
			 {
			 	swap(small[x],big[x]);
			 	swap(smallid[x],bigid[x]);
			 }
		  }
	  }
}

void dfs2(int x,int father)
{
    int i;
    for(i=head[x];i!=-1;i=e[i].next)
	{
		int to=e[i].to;
		if(to==father) continue;

		if(bigid[x]==to)
		{
			if(small[x]+e[i].len>small[to])
			{
				small[to]=small[x]+e[i].len;
				smallid[to]=x;
				if(small[to]>big[to])
				{
					swap(big[to],small[to]);
					swap(bigid[to],smallid[to]);
				}
			}
		}
		else
		{
			if(big[x]+e[i].len>small[to])
			{
				small[to]=big[x]+e[i].len;
				smallid[to]=x;
				if(small[to]>big[to])
				{
					swap(big[to],small[to]);
					swap(bigid[to],smallid[to]);
				}
			}
		}
		dfs2(to,x);
	}
}

int main()
{
	int i,j;
	while(~scanf("%d",&n))
	{
		memset(head,-1,sizeof(head));
		int len,to;
		num=0;
		for(i=2;i<=n;i++)
		{
			scanf("%d%d",&to,&len);
			add(i,to,len);
			add(to,i,len);
		}

		dfs1(1,-1);
		dfs2(1,-1);

		for(i=1;i<=n;i++)
			printf("%d\n",big[i]);
	}
	return 0;
}




在 Mac OS 上编译 WebRTC 教程 阅读详情

相关推荐

FreeSWITCH安装指南:三种部署方式解析与实践对比

Freeswitch部署方案比较:Yum安装简单快捷但灵活性差;源码安装可定制性强,适合深度开发和性能优化;Docker部署环境一致性好但网络配置复杂。生产环境推荐源码安装以获得最佳性能和定制能力,而Docker适合快速部署和扩展。不同方案各有利弊,需根据具体需求选择。

c_zyer的博客 2139

L - Computer HDU - 2196 (树形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...

weixin_44184902的博客 200

从零到一:OptimizePI Pre-layout PDN前仿真实战指南

本文详细介绍了如何使用OptimizePI进行电源完整性(PDN)前仿真,从软件安装配置到元器件建模、去耦电容配置及仿真参数设置,提供了实战技巧和常见问题排查指南。通过OptimizePI的Pre-layout仿真,工程师可以在PCB布局前优化电源分配网络,显著提升设计效率并降低成本。

weixin_28304023的博客 506

树的直径的常见结论和技巧及其应用

这次我主要是想通过经典习题的分析来向大家说明树的直径中一些重要结论与技巧。 先给出一道题: 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. Manage

AC__dream的博客 431

智能优化算法-北方苍鹰优化算法(NGO)(附源码)

北方苍鹰优化算法 (Northern Goshawk Optimizer, NGO) 是一种基于群体智能的元启发式优化算法,它模拟了北方苍鹰(Northern Goshawk)的捕食行为、领地行为以及社交互动,用于解决复杂的优化问题。总之,NGO作为一种新颖的优化算法,在处理复杂优化问题方面展现出了潜力。随着进一步的研究和应用,NGO有望成为解决实际问题的有效工具。

w971656545的博客 1360

告别手册!S32K3XX的eMIOS实战:从GPT定时到PWM输出,一个通道搞定电机控制

本文深入探讨了NXP S32K3XX系列MCU的eMIOS模块在电机控制中的高效应用。通过单通道实现PWM生成、输入捕获和定时中断三大功能,展示了如何简化BLDC电机控制硬件设计。文章结合RTD库与寄存器级编程,提供动态模式切换和性能优化方案,显著降低CPU负载。

weixin_42522374的博客 145

Computer (树形dp 经典题)

题目:Computer 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 settle

sdau164185的博客 779

CAN 比特率和采样点计算

架构根据输入频率和比特率自动计算。

ldinvicible的专栏 787

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

菜鸡的博客 299

Labview调用C++ dll之字符串数组传递

做项目的时候碰到了一个需求,有一个复杂的运算,用labview实现非常的麻烦,但是如果用C++实现,就会灵活很多。尝试着采用Labview调用C++编写的动态链接库方式解决,兼顾Labview的便利和C++的灵活性。 运算好说,主要难点是Labview与C++之间的数据对应关系,因为我最后的结果是既有字符串又有数字,对于单纯的数字来说,直接通过调用数组的方式就能解决,这里主要记录一下字符串数组...

bgbgx的博客 6806

基于STM32与ESP8266的MQTT协议实现阿里云物联网平台远程LED控制

本文详细介绍了如何利用STM32单片机与ESP8266 Wi-Fi模块,通过MQTT协议连接阿里云物联网平台,实现远程控制LED灯的完整物联网项目。内容涵盖硬件连接、阿里云平台配置、MQTT协议与AT指令解析、STM32代码实战以及数据解析与调试技巧,为嵌入式开发者提供了一个清晰、实用的物联网入门实践指南。

svm4gardener的博客 791

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

untilyouydc 286

手把手教你学simulink(57.3)--电励磁同步电动机场景示例:基于Simulink的自适应控制(Adaptive Control)电励磁同步电动机

目录基于Simulink的自适应控制(Adaptive Control)电励磁同步电动机项目实例1. 项目背景2. 系统架构2.1 电励磁同步电动机模型2.2 三相逆变器模型2.3 自适应控制器(Adaptive Controller)2.4 系统框图3. 模型设计3.1 创建Simulink模型3.2 自适应控制(Adaptive Control)设计3.3 仿真环境搭建4. 参数优化4.1 自动调优5. 实际应用案例5.1 工业驱动系统5.2 风力发电系统6. 结论需求分析电励磁同步电动机(Electr

MHD0815的博客 503

hdu2196Computer【树形dp】

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

大神养成中..... 3026

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

HDU2196.Computer(树形DP)

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

Harris-H的博客 579

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

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

Stupid_Turtle的博客 718

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

HDU2196 Computer 树形DP

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

2301_79917474的博客 416

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的博客 327

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的博客 473

【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
上一篇: hdu1520Anniversary party(比poj 2342数据强一些)
下一篇: poj1655Balancing Act(树的重心)
左眼皮跳跳~
博客等级 码龄13年 17粉丝 400原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值