hdu 2196 树形dp
思路:先求以1为根时,每个节点到子节点的最大长度。然后再次从1进入进行更新。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
#define Maxn 20010
#define inf 0x7fffffff
using namespace std;
int vi[Maxn],si[Maxn],n,road[Maxn],Max[Maxn],lMax[Maxn],head[Maxn],e;
struct Edge{
int u,v,val,next;
}edge[Maxn*];
void init()
{
memset(vi,,sizeof(vi));
memset(si,,sizeof(si));
memset(road,,sizeof(road));
memset(Max,,sizeof(Max));
memset(lMax,,sizeof(lMax));
memset(head,-,sizeof(head));
e=;
}
void add(int u,int v,int val)
{
edge[e].u=u,edge[e].v=v,edge[e].val=val,edge[e].next=head[u],head[u]=e++;
edge[e].u=v,edge[e].v=u,edge[e].val=val,edge[e].next=head[v],head[v]=e++;
}
int dfs(int u)
{
int i,v,sz;
vi[u]=;
for(i=head[u];i!=-;i=edge[i].next)
{
v=edge[i].v;
if(vi[v]) continue;
int temp=dfs(v);
if(temp+edge[i].val>Max[u])
{
lMax[u]=Max[u];
Max[u]=temp+edge[i].val;
road[u]=v;
}
else if(temp+edge[i].val>lMax[u])
lMax[u]=temp+edge[i].val;
}
return Max[u];
}
void update(int u,int val)
{
int i,v,sz;
vi[u]=;
for(i=head[u];i!=-;i=edge[i].next)
{
v=edge[i].v;
if(vi[v]) continue;
if(road[u]==v) update(v,max(val,lMax[u])+edge[i].val);
else update(v,max(Max[u],val)+edge[i].val);
}
Max[u]=max(Max[u],val);
}
int main()
{
int i,j,a,b;
while(scanf("%d",&n)!=EOF)
{
init();
for(i=;i<=n;i++){
scanf("%d%d",&a,&b);
add(i,a,b);
}
dfs();
memset(vi,,sizeof(vi));
update(,);
for(i=;i<=n;i++)
printf("%d\n",Max[i]);
}
return ;
}
hdu 2196 树形dp的更多相关文章
- HDU 2196树形DP(2个方向)
		HDU 2196 [题目链接]HDU 2196 [题目类型]树形DP(2个方向) &题意: 题意是求树中每个点到所有叶子节点的距离的最大值是多少. &题解: 2次dfs,先把子树的最大 ... 
- HDU 2196 树形DP Computer
		题目链接: HDU 2196 Computer 分析: 先从任意一点开始, 求出它到其它点的最大距离, 然后以该点为中心更新它的邻点, 再用被更新的点去更新邻点......依此递推 ! 代码: ... 
- hdu 4123 树形DP+RMQ
		http://acm.hdu.edu.cn/showproblem.php? pid=4123 Problem Description Bob wants to hold a race to enco ... 
- HDU 1520   树形dp裸题
		1.HDU 1520 Anniversary party 2.总结:第一道树形dp,有点纠结 题意:公司聚会,员工与直接上司不能同时来,求最大权值和 #include<iostream> ... 
- HDU 1561 树形DP入门
		The more, The Better Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ... 
- HDU 1520 树形DP入门
		HDU 1520 [题目链接]HDU 1520 [题目类型]树形DP &题意: 某公司要举办一次晚会,但是为了使得晚会的气氛更加活跃,每个参加晚会的人都不希望在晚会中见到他的直接上司,现在已知 ... 
- codevs 1380/HDU 1520  树形dp
		1380 没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 回到问题 题目描述 Description Ural大学有N个职员 ... 
- HDU 5834 [树形dp]
		/* 题意:n个点组成的树,点和边都有权值,当第一次访问某个点的时候获得利益为点的权值 每次经过一条边,丢失利益为边的权值.问从第i个点出发,获得的利益最大是多少. 输入: 测试样例组数T n n个数 ... 
- hdu 4267 树形DP
		思路:先dfs一下,找出1,n间的路径长度和价值,回溯时将该路径长度和价值清零.那么对剩下的图就可以直接树形dp求解了. #include<iostream> #include<al ... 
随机推荐
- Python 发送邮件包含附件报表示例
			之前需要用Python发送报表邮件,在网上找了下资料,基本上符合要求了. 相关的示例如下,懂python的人应该都知道. from email.mime.text import MIMEText fr ... 
- Jvm基础(2)-Java内存模型
			Jvm基础(2)-Java内存模型 主内存和工作内存 Java内存模型包括主内存和工作内存两个部分:主内存用来存储线程之间的共享变量:而工作内存中存储每个线程的相关变量. 如下图所示: 需要注意的是: ... 
- 最新CentOS6.x下redis安装
			1:软件环境: 系统版本:CentOS release 6.5 redis版本:redis-cli 3.0.5 安装目录:"/usr/local/redis" 下载软件:" ... 
- php-fpm占用系统资源分析
			故障检测 1.别的先不管,先top看一下cpu.ram.swap哪个比较紧张. 由上图分析,可以看出共有602个进程,其中有601个进程休眠了.这好像有点不对劲,内核进程也就80个左右,加上memca ... 
- 转载JQuery 中empty, remove 和 detach的区别
			转载 http://www.cnblogs.com/lisongy/p/4109420.html .empty() 描述: 从DOM中移除集合中匹配元素的所有子节点. 这个方法不接受任何参数. 这个 ... 
- java tools: jstack
			SYNOPSIS jstack [ option ] pidclick here to see other detail If the given process is running on a 64 ... 
- <%%>与<scriptrunat=server>,<%=%>与<%#%>的区别
			这些东西都是asp.net前台页面与后台代码交互过程中经常使用的,它们之间有的非常相似,又有一些不同.对比学习下,看看他们之间的联系与区别. 首先看<%%>与<scriptrun ... 
- Model First:创建实体数据模型(ADO.NET 实体数据模型)
			Microsoft Entity Framework是一个对象关系映射工具(Object Relational Mapping ,O/RM)工具.它可以让你从一个数据库自动地生成数据接入层.实体框架免 ... 
- hadoop 关闭进程时报错no 进程 to stop
			前两天和朋友李天王吃饭的时候,聊到了一个hadoop的运维的很简单问题,感觉很有意思,以前也没有注意过,现在加以重现和整理. 感谢李天王的分享.... 翻看了yarn-deamon.sh st ... 
- SmallDateTime时间范围检查
			SamllDataTime是SQL Server中的一种表达时间的类型, 精度不高但是省空间,具体的细节就查看一下MSDN的文档吧. http://msdn.microsoft.com/zh-cn/l ... 
