树形DP入门题目。

树形DP说白了就是在搜索的时候动态规划。

只要你懂的深搜+动态规划,就能理解这个基础题了。

先直接搜索到最底层,然后一层一层动态规划,可以说有点像数塔。

dp[i][1],dp[i][0]代表取这个节点和不取这个节点,所以。

dp[i][1]+=dp[v][0]    v是的子节点

dp[i][0]+=max(dp[v][1],dp[v][0])

初始的时候将最后一层叶子节点dp[i][1]赋值为相应值即可。

用邻接表 似乎更加的直观,速度自然是更加的快。

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
struct node{int v,nxt;
}e[12000];
int dp[6005][2],father[6005];
int num,head[6005];int max(int a,int b){return a>b?a:b;
}
void add(int a,int b){e[num].v=b;e[num].nxt=head[a];head[a]=num++;
}       void dfs(int n){int i;for(i=head[n];i!=-1;i=e[i].nxt){int v=e[i].v;if(father[v]==n){dfs(v);dp[n][1]+=dp[v][0];dp[n][0]+=max(dp[v][1],dp[v][0]);}}
}
int main()
{int t;while(scanf("%d",&t)!=EOF){memset(dp,0,sizeof(dp));memset(head,-1,sizeof(head));memset(father,0,sizeof(father));num=0;int i;for(i=1;i<=t;i++)scanf("%d",&dp[i][1]);int root=1;int a,b;while(scanf("%d%d",&a,&b),a||b){father[a]=b;add(b,a);if(father[b]==0) root=b;}dfs(root);printf("%d\n",dp[root][1]>dp[root][0]?dp[root][1]:dp[root][0]);}return 0;
}

poj 2342 树形DP相关推荐

  1. POJ 2342 (树形DP)

    题目链接: http://poj.org/problem?id=2342 题目大意:直属上司和下属出席聚会.下属的上司出现了,下属就不能参加,反之下属参加.注意上司只是指直属的上司.每个人出席的人都有 ...

  2. Fire (poj 2152 树形dp)

    Fire (poj 2152 树形dp) 给定一棵n个结点的树(1<n<=1000).现在要选择某些点,使得整棵树都被覆盖到.当选择第i个点的时候,可以覆盖和它距离在d[i]之内的结点,同 ...

  3. POJ 3342 树形DP+Hash

    这是很久很久以前做的一道题,可惜当时WA了一页以后放弃了. 今天我又重新捡了起来.(哈哈1A了) 题意: 没有上司的舞会+判重 思路: hash一下+树形DP 题目中给的人名hash到数字,再进行运算 ...

  4. poj 2486 树形dp

    思路:这题是裸的树形dp.dp[i][j]表示第i个节点花费j步并且从子节点返回,能得到的最大苹果数:nback[i[j]表示第i个节点花费j步并且进入某个子节点不返回,能得到的最大苹果数.那么我们就 ...

  5. poj 2152 树形dp(建立消防站)

    题意:给定n个节点组成的树,树边有权.现在要在一些点上建立消防站,每个点建站都有花费cost[i].如果某点上没有消防站,那么在距离它d[i]之内的某个点上必须有消防站.求符合上述条件的最小费用建站方 ...

  6. poj 1947(树形dp+背包问题)

    题大意是:给你一棵节点为n的树,问至少砍几刀可以孤立出一棵节点为m的子树. 解题思路:这题很容易想到状态dp[i][j]表示以i节点为根,节点总数为j的子树最少需要切几刀.但是这个状态方程确实很难想, ...

  7. poj 3417 树形dp+LCA

    思路:我以前一直喜欢用根号n分段的LCA.在这题上挂了,第一次发现这样的LCA被卡.果断改用Tarjan离线算法求LCA. 当前节点为u,其子节点为v.那么: 当以v根的子树中含有连接子树以外点的边数 ...

  8. poj 2057 树形DP,数学期望

    题目链接:http://poj.org/problem?id=2057 题意:有一只蜗牛爬上树睡着之后从树上掉下来,发现后面的"房子"却丢在了树上面, 现在这只蜗牛要求寻找它的房子 ...

  9. |POJ 2342|动态规划|Anniversary party

    http://poj.org/problem?id=2342 树形DP基础题,具体看注释. 设状态f[i][0]为i不来,f[i][1]为i要来 f[r][1] +=  f[i][0];   //r要 ...

最新文章

  1. 12306系统的秒杀“艺术”:如何抗住100万人同时抢1万张票?
  2. java中this.value_java中关键字this的用法
  3. php调用外站数据,dedecms数据库外部调用,两dedecms站点数据远程调用
  4. 【MHA】--MHA 介绍(1)
  5. 【深度】专访华宝基金首席信息官李孟恒:搭建数据驱动引擎,开创投研一体新格局
  6. 源代码开发的公司该如何选择加密软件?
  7. oracle入门教程+视频教程
  8. linux下搭建redis内网端口映射工具-rinetd
  9. wso2_使用WSO2开发
  10. python加密狗的制作_制作u盘加密狗
  11. Android 蓝牙4.0 BLE 获取链接设备Rssi值
  12. 5菜鸟教程_【菜鸟手册7】如何在NVIDIA Jetson平台上安装Anaconda
  13. Boss爬虫prd文档
  14. 如何对接payjs的个人微信扫码支付接口
  15. 记一次带宽跑满服务器卡死事故处理
  16. matlab中figure图片大小修改
  17. OAuth2.0最简向导(多图预警)
  18. 10个最常见的HTML5面试题及答案
  19. 推荐六款图片素材网站
  20. This probably means that Tcl wasn‘t installed properly报错

热门文章

  1. cocos2d-x游戏实例(19)-纵版射击游戏(6)
  2. socket 通信关于bind那点事
  3. 顶级c程序员之路 基础篇 - 第一章 关键字的深度理解 number-1
  4. 低学历程序员的红利来了,这个政策来的太惊喜!
  5. So Hot ?快给 CPU 降降温!
  6. 使用VMware VSphere WebService SDK进行开发 (六)——检测告警信息
  7. 音视频技术开发周刊 | 136
  8. NIUDAY 11.23 北京站抢票啦 | 看 AI 落地行业 享 AI 时代红利
  9. Go标准库Context
  10. 程序员如何用gRPC谈一场恋爱