题目链接:  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. Day9 网络编程

    OSI(Open System Interconnect),即开放式系统互联. ISO(International Standards Organization)国际标准化组织 OSI七层模型: TC ...

  2. Scala的Option类型

    Scala的Option类型 为了让所有东西都是对象的目标更加一致,也为了遵循函数式编程的习惯,Scala鼓励你在变量和函数返回值可能不会引用任何值的时候使用Option类型.在没有值的时候,使用No ...

  3. Keil的c语言编译器

    我曾经通过查看反汇编代码对KEILC编译器进行了测试,大概有这么一下内容,也得出一些结论. (1)全局变量:如果程序中定义了全局变量,而且初始值不是0.此时,在程序调到main()函数执行前,除了要进 ...

  4. mvc4 membership, [Win32Exception (0x80004005): The system cannot find the file specified]

    public class UsersContext : DbContext { public UsersContext() : base("conn1") //change the ...

  5. vs2010 使用SignalR 提高B2C商城用户体验(一)

    vs2010 使用SignalR 提高B2C商城用户体验(一) 1.需求简介,做为新时代的b2c商城,没有即时通讯,怎么提供用户粘稠度,怎么增加销量,用户购物的第一习惯就是咨询,即时通讯,应运而生.这 ...

  6. eclipse中配置c++开发环境 Eclipse + CDT + MinGW

    转自eclipse中配置c++开发环境 Eclipse + CDT + MinGW 基本框架:Eclipse + CDT + MinGW 背景知识: CDT:CDT 是完全用 Java 实现的开放源码 ...

  7. OneAlert 入门(三)——事件分析

    OneAlert 是国内首个 SaaS 模式的云告警平台,集成国内外主流监控/支撑系统,实现一个平台上集中处理所有 IT 事件,提升 IT 可靠性.有了 OneAlert,你可以更快更合理地为事件划分 ...

  8. mysql connect

    def connect(_host, _user, _passwd, _db, _charset, _port): conn = MySQLdb.connect(host=_host, user=_u ...

  9. 【HDU 5909】 Tree Cutting (树形依赖型DP+点分治)

    Tree Cutting Problem Description Byteasar has a tree T with n vertices conveniently labeled with 1,2 ...

  10. 程序异常捕获库 - CrashRpt

    CrashRpt.dll用来在应用程序出现异常crash时,捕获到错误. 并收集出错信息: MiniDump文件.硬件信息.系统信息.出错信息.进程信息.服务信息.驱动信息.启动信息.软件列表.端口信 ...