题意比较难理解>-<,其实做起来还是比较容易的。只要从父节点往下就行了,根本都还不用通过兄弟节点更新节点。

//hdu 4799 树形dp
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <string.h>
#include <vector>
#define inf 0x3f3f3f3f
#define lowbit(x) ((x)&(-x))
#define maxn 50055
using namespace std;
int dp[maxn][5],val[maxn],sta[maxn],fl[maxn],n,x,y,fa[maxn];
vector<int> g[maxn];int cal(int a)
{if(fl[a]==0)return x;elsereturn y;
}void dfs(int a,int b)
{int cnt=0;if(b%2!=0)sta[a]=1-sta[a];if(fl[a]==1)cnt=y;elsecnt=x;dp[a][0]=val[a]*(1-sta[a])-sta[a]*val[a];dp[a][1]=val[a]*sta[a]-(1-sta[a])*val[a]-cnt;for(int i=0;i<g[a].size();i++){int j=g[a][i];dfs(j,b+fl[j]);if(a==0)dp[a][0]+=max(dp[j][1],dp[j][0]);else{dp[a][1]+=max(dp[j][1]+cal(j),dp[j][0]-cal(j));dp[a][0]+=max(dp[j][1],dp[j][0]);}//printf("dp[%d][1]=%d  dp[%d][0]=%d \n",a,dp[a][1],a,dp[a][0]);}
}int main () {//freopen("d:\\in.txt","r",stdin);while(scanf("%d%d%d",&n,&x,&y)==3){for(int i=0;i<=n;i++)g[i].clear();for(int i=1;i<=n;i++){scanf("%d%d%d%d",&val[i],&fa[i],&fl[i],&sta[i]);g[fa[i]].push_back(i);}val[0]=0;fl[0]=0;sta[0]=0;memset(dp,0,sizeof(0));dfs(0,0);if(max(dp[0][0],dp[0][1])<0)printf("HAHAHAOMG\n");elseprintf("%d\n",max(dp[0][0],dp[0][1]));}return 0;
}

hdu 4399 树形dp相关推荐

  1. hdu 2196 树形dp

    [题意]:给出一棵树, 每条边有一个权值 求离每个节点最远的点的权值和 看这篇题解学会的  http://tech.ddvip.com/2013-09/1379006959202653.html 树形 ...

  2. hdu 1520 树形dp

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 #include<cstdio> #include<cstring> # ...

  3. hdu 5148 树形dp,分组背包

    题目: 题目分析: 状态方程: dp[当前节点的标号][当前已经选取的城市数] 设已经选取的城市数是K 初始状态: dp[u][0] = dp[u][1] = 0 , 其他的将值设置为无穷大 树形转移 ...

  4. Starship Troopers(HDU 1011 树形DP)

    题意: 给定n个定点和m个士兵,n个定点最终构成一棵树,每个定点有一定x个bugs和y个value,每20个bug需要消耗一个士兵,不足20也消耗一个,然后最终收获y个value,只有父节点被占领后子 ...

  5. hdu 5148Cities 树形dp

    //dp[u][k1]=min(dp[u][k1-k2]+dp[v][k2]+edge*k2*(k-k2)) //dp[u][k]表示以u节点为根节点的子树中选k个节点所得的最优解 #include& ...

  6. fwt优化+树形DP HDU 5909

    1 //fwt优化+树形DP HDU 5909 2 //见官方题解 3 // BestCoder Round #88 http://bestcoder.hdu.edu.cn/ 4 5 #include ...

  7. HDU 2196 Computer 树形DP经典题

    链接:http://acm.hdu.edu.cn/showproblem.php? pid=2196 题意:每一个电脑都用线连接到了还有一台电脑,连接用的线有一定的长度,最后把全部电脑连成了一棵树,问 ...

  8. hdu 5909 Tree Cutting——点分治(树形DP转为序列DP)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5909 点分治的话,每次要做一次树形DP:但时间应该是 siz*m2 的.可以用 FWT 变成 siz*ml ...

  9. HDU 1520 Anniversary party(树形dp)

    HDU 1520 Anniversary party(树形dp) 树形dp第一题!!! 题意很清晰,思路也很明确.很容易找到根节点,即最大的boss,通过根节点向下dp. 状态转移方程: int to ...

  10. hdu 1561 The more, The Better 树形dp

    http://acm.hdu.edu.cn/showproblem.php?pid=1561 做树形dp比较小. 先上网学习下,总结下套路. dp[i][j]表示在第i个节点,有j个名额选的时候的最大 ...

最新文章

  1. 数据结构 python的书推荐-java数据结构书一般推荐看什么好?
  2. 从零开始Code Review
  3. Android apk动态加载机制的研究(二):资源加载和activity生命周期管理
  4. Flink + Iceberg 在去哪儿的实时数仓实践
  5. VC 为静态控件添加事件
  6. wpspbc按钮是什么意思_AC只是英文单词缩写,在科技领域常见的有三种意思
  7. clark变换_电力变换器PWM原理与实践,p43页,空间矢量理解
  8. spring 读取配置文件
  9. javax.xml.ws.WebServiceException: Provider com.sun.xml.ws.spi.ProviderImpl not found
  10. 单片机编程软件很简单(16),Keil单片机编程软件建立工程项目
  11. Mybatis的一级缓存和二级缓存,看完不再懵逼
  12. “项目集管理标准体系与PgMP认证”讲座笔记
  13. gtx1650显卡什么级别! GTX1650相当于什么显卡
  14. slf4j的包使用说明
  15. C++控制台实现简单的注册登录
  16. Android Studio如何查看自己创建的SQLite数据库
  17. Spring5-Bean的自动装配
  18. 福禄克DTX-1800其配件DTX-CHA002通道适配器CHANNEL更换RJ45插座小记
  19. 矩阵特征值和特征向量求解——特征值分解
  20. 数码相机名词解释-变焦镜头 物距 枕形失真 视角 透视 微距摄影 焦距系数

热门文章

  1. Volatile底层实现原理
  2. 10、私网与公网的转换---NAT网络地址转换技术
  3. SSE学习-一个小栗子
  4. 取得平均薪水最高的部门的部门编号
  5. 计算机专门存储数据的单元,认识算法的数据存储单元——变量
  6. 动态规划算法二项式计算c语言,动态规划 — 计算二项式系数
  7. 安装远程服务器管理工具(RSAT-Remote Server Administration Tools)
  8. 苹果手机如何快速的直接从相册里面的图片提取文字?
  9. New File(.)
  10. python处理word页码_使用Python向Word文档添加页码