题目链接:  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. POJ 3393 Lucky and Good Months by Gregorian Calendar 模拟题

    题目:http://poj.org/problem?id=3393 不多说了,简单模拟题,因为粗心写错了两个字母,导致错了N遍,模拟还是一贯的恶心,代码实在不想优化了,写的难看了点.. #includ ...

  2. 从 IT 的角度思考 BIM(一):面向对象

    还记得那个笑话吗:要把大象放进冰箱,总共分几步?这不仅仅是一个笑话,还是一个值得我们好好分析的笑话. 如果要放进冰箱的是一个苹果,那么也就不可笑了,但换成大象,就引起了我们的兴趣和注意,为什么? 我们 ...

  3. MINA源码阅读之ACP

    Processor在XXAcceptor以及XXConnector中所扮演的只能就是:作为Acceptor以及Connetor所创建的Session的Processor: IoAcceptor作为他所 ...

  4. Android sqlite 数据库在java代码中的增删改查

    private void queryPerson(PersonSQLiteOpenHelper personSQLiteOpenHelper) { SQLiteDatabase sqLiteDatab ...

  5. 【HDU 5381】 The sum of gcd (子区间的xx和,离线)

    [题目] The sum of gcd Problem Description You have an array A,the length of A is nLet f(l,r)=∑ri=l∑rj= ...

  6. 【BZOJ 3387】 线段树= =

    57 跨栏训练为了让奶牛参与运动,约翰建造了 K 个栅栏.每条栅栏可以看做是二维平面上的一条线段,它们都平行于 X 轴.第 i 条栅栏所覆盖的 X 轴坐标的区间为 [ Ai,Bi ], Y 轴高度就是 ...

  7. ANDROID_MARS学习笔记_S05_005_方向传感器

    import android.app.Activity; import android.content.Context; import android.hardware.Sensor; import ...

  8. 【HDOJ】1239 Calling Extraterrestrial Intelligence Again

    这题wa了很多词,题目本身很简单,把a/b搞反了,半天才检查出来. #include <stdio.h> #include <string.h> #include <ma ...

  9. C#反射之基础应用

    今天把反射的东西整理了一下 , 提供了最全面的东西 , 当然也是基础的东西 ,在学好了这一切的基础上 , 大家可以学习反射的具体插件等应用 首先我们建立一个类库 , 将它生成为 reflectPrj  ...

  10. Codevs_1230_元素查找_(set/Hash)

    描述 http://codevs.cn/problem/1230/ ... 1230 元素查找 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond       题目 ...