poj 2342 树形DP
树形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相关推荐
- POJ 2342 (树形DP)
题目链接: http://poj.org/problem?id=2342 题目大意:直属上司和下属出席聚会.下属的上司出现了,下属就不能参加,反之下属参加.注意上司只是指直属的上司.每个人出席的人都有 ...
- Fire (poj 2152 树形dp)
Fire (poj 2152 树形dp) 给定一棵n个结点的树(1<n<=1000).现在要选择某些点,使得整棵树都被覆盖到.当选择第i个点的时候,可以覆盖和它距离在d[i]之内的结点,同 ...
- POJ 3342 树形DP+Hash
这是很久很久以前做的一道题,可惜当时WA了一页以后放弃了. 今天我又重新捡了起来.(哈哈1A了) 题意: 没有上司的舞会+判重 思路: hash一下+树形DP 题目中给的人名hash到数字,再进行运算 ...
- poj 2486 树形dp
思路:这题是裸的树形dp.dp[i][j]表示第i个节点花费j步并且从子节点返回,能得到的最大苹果数:nback[i[j]表示第i个节点花费j步并且进入某个子节点不返回,能得到的最大苹果数.那么我们就 ...
- poj 2152 树形dp(建立消防站)
题意:给定n个节点组成的树,树边有权.现在要在一些点上建立消防站,每个点建站都有花费cost[i].如果某点上没有消防站,那么在距离它d[i]之内的某个点上必须有消防站.求符合上述条件的最小费用建站方 ...
- poj 1947(树形dp+背包问题)
题大意是:给你一棵节点为n的树,问至少砍几刀可以孤立出一棵节点为m的子树. 解题思路:这题很容易想到状态dp[i][j]表示以i节点为根,节点总数为j的子树最少需要切几刀.但是这个状态方程确实很难想, ...
- poj 3417 树形dp+LCA
思路:我以前一直喜欢用根号n分段的LCA.在这题上挂了,第一次发现这样的LCA被卡.果断改用Tarjan离线算法求LCA. 当前节点为u,其子节点为v.那么: 当以v根的子树中含有连接子树以外点的边数 ...
- poj 2057 树形DP,数学期望
题目链接:http://poj.org/problem?id=2057 题意:有一只蜗牛爬上树睡着之后从树上掉下来,发现后面的"房子"却丢在了树上面, 现在这只蜗牛要求寻找它的房子 ...
- |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要 ...
最新文章
- 12306系统的秒杀“艺术”:如何抗住100万人同时抢1万张票?
- java中this.value_java中关键字this的用法
- php调用外站数据,dedecms数据库外部调用,两dedecms站点数据远程调用
- 【MHA】--MHA 介绍(1)
- 【深度】专访华宝基金首席信息官李孟恒:搭建数据驱动引擎,开创投研一体新格局
- 源代码开发的公司该如何选择加密软件?
- oracle入门教程+视频教程
- linux下搭建redis内网端口映射工具-rinetd
- wso2_使用WSO2开发
- python加密狗的制作_制作u盘加密狗
- Android 蓝牙4.0 BLE 获取链接设备Rssi值
- 5菜鸟教程_【菜鸟手册7】如何在NVIDIA Jetson平台上安装Anaconda
- Boss爬虫prd文档
- 如何对接payjs的个人微信扫码支付接口
- 记一次带宽跑满服务器卡死事故处理
- matlab中figure图片大小修改
- OAuth2.0最简向导(多图预警)
- 10个最常见的HTML5面试题及答案
- 推荐六款图片素材网站
- This probably means that Tcl wasn‘t installed properly报错