题目链接:  HDU 2196 Computer

分析:   先从任意一点开始, 求出它到其它点的最大距离, 然后以该点为中心更新它的邻点,

再用被更新的点去更新邻点......依此递推 !

代码:

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <string>
#include <cstring>
#include <algorithm>
#include <iomanip> using namespace std;
const int inf = 0x7FFFFFFF;
const int maxn = 11111; struct node{
int to, dix, sum;
node *next;
}tree[maxn<<1], *head[maxn]; int ptr, n;
bool vis[maxn];
int dp[maxn],h[maxn]; void Init(){
ptr=1;
memset(dp,0,sizeof(dp));
memset(vis,false,sizeof(vis));
memset(head,0,sizeof(head));
} void AddEdge(int x,int y,int s){
tree[ptr].dix=s;
tree[ptr].to=y;
tree[ptr].next=head[x];
head[x]=&tree[ptr++];
} void DFS(int cnt){
vis[cnt]=true;
node *p=head[cnt];
while(p!=NULL){
if(vis[p->to]) {
p=p->next; continue;
}
DFS(p->to);
dp[cnt]=max(dp[cnt],dp[p->to]+p->dix);
p->sum=dp[p->to]+p->dix;
p=p->next;
}
} void Tree_Dp(int father, int son){
if(vis[son]) return ;
vis[son]=true;
int Max=0;
node* p=head[father];
while(p!=NULL){
if(p->to!=son)
Max=max(Max,p->sum);
p=p->next;
}
p=head[son];
while(p!=NULL){
if(p->to==father){
p->sum=p->dix+Max; break;
}
p=p->next;
}
p=head[son];
while(p!=NULL){
dp[son]=max(dp[son],p->sum);
Tree_Dp(son,p->to);
p=p->next;
}
}
int main(){
while(~scanf("%d",&n)&&n){
Init();
for(int i=2;i<=n;++i){
int a,b; scanf("%d%d",&a,&b);
AddEdge(a,i,b);
AddEdge(i,a,b);
} DFS(1); ///得到1点到其它所有点的距离 memset(vis,false,sizeof(vis));
node* p=head[1];
while(p!=NULL){ ///从1的邻点开始更新
Tree_Dp(1,p->to);
p=p->next;
}
for(int i=1;i<=n;++i)
printf("%d\n",dp[i]);
}
return 0;
}

HDU 2196 树形DP Computer的更多相关文章

  1. HDU 2196树形DP(2个方向)

    HDU 2196 [题目链接]HDU 2196 [题目类型]树形DP(2个方向) &题意: 题意是求树中每个点到所有叶子节点的距离的最大值是多少. &题解: 2次dfs,先把子树的最大 ...

  2. hdu 2196 树形dp

    思路:先求以1为根时,每个节点到子节点的最大长度.然后再次从1进入进行更新. #include<iostream> #include<cstring> #include< ...

  3. hdu 4123 树形DP+RMQ

    http://acm.hdu.edu.cn/showproblem.php? pid=4123 Problem Description Bob wants to hold a race to enco ...

  4. HDU 1520 树形dp裸题

    1.HDU 1520  Anniversary party 2.总结:第一道树形dp,有点纠结 题意:公司聚会,员工与直接上司不能同时来,求最大权值和 #include<iostream> ...

  5. HDU 1561 树形DP入门

    The more, The Better Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  6. HDU 1520 树形DP入门

    HDU 1520 [题目链接]HDU 1520 [题目类型]树形DP &题意: 某公司要举办一次晚会,但是为了使得晚会的气氛更加活跃,每个参加晚会的人都不希望在晚会中见到他的直接上司,现在已知 ...

  7. codevs 1380/HDU 1520 树形dp

    1380 没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 回到问题 题目描述 Description Ural大学有N个职员 ...

  8. HDU 5834 [树形dp]

    /* 题意:n个点组成的树,点和边都有权值,当第一次访问某个点的时候获得利益为点的权值 每次经过一条边,丢失利益为边的权值.问从第i个点出发,获得的利益最大是多少. 输入: 测试样例组数T n n个数 ...

  9. hdu 4267 树形DP

    思路:先dfs一下,找出1,n间的路径长度和价值,回溯时将该路径长度和价值清零.那么对剩下的图就可以直接树形dp求解了. #include<iostream> #include<al ...

随机推荐

  1. Java 泛型快速排序 以sdut 1196为例

    oj链接:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1196 Java中,Arrays.so ...

  2. EntityFramework动态组合多排序字段

    前言:在使用EF当中,肯定会遇到动态查询的需求,建立一个公共调用的动态组合表达式查询也是必不可少的,以下是建立动态组合多排序字段做个记录,供以后调用 1.建立一个结构,用于多个排序字段组合,这个结构体 ...

  3. JavaScript高级之闭包的概念及其应用

    主要内容: 什么是闭包 闭包使用的一般模式 闭包都能做些什么 本文是我的JavaScript高级这个系列中的第二篇文章. 在这个系列中,我计划分析说明 一下JavaScript中的一些常用的而又神秘的 ...

  4. leetcode 第二题Add Two Numbers java

    链接:http://leetcode.com/onlinejudge Add Two Numbers You are given two linked lists representing two n ...

  5. canvas仿黑客帝国的字符下落

    ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 ...

  6. 实战 SSH 端口转发

    转自实战 SSH 端口转发 通过本文的介绍,读者可以从中了解到如何应用 SSH 端口转发机制来解决日常工作 / 生活中的一些问题.学会在非安全环境下使用端口转发来加密网络应用,保护个人隐私以及重要商业 ...

  7. VS2010 C# 调用Web Service .

    转自:http://blog.csdn.net/fenglailea/article/details/7262566 打开VS2010,打开"文件-新建-网站",选择"A ...

  8. 最全的微软msdn原版windows系统镜像和office下载地址集锦

    随着windows的发展,越来越多的人都热衷于微软的原版系统下载了,相比之前的版本比如winxp版本,windows vista/win7/win8/win8.1/win10后来的版本在安装方面也比较 ...

  9. 带文字的ImageButton[自定义]

    今天Android项目中遇到一个ImageButton控件上面要显示文字,无奈自定义了一个ImageButton,继承自ImageButton.其实就是override这个控件的onDraw(Canv ...

  10. Oracle正则表达式

       Oracle正则表达式 正则表达式具有强大.便捷.高效的文本处理功能.能够添加.删除.分析.叠加.插入和修整各种类型的文本和数据.Oracle从10g开始支持正则表达式. 下面通过一些例子来说明 ...