hdu 4399 树形dp
题意比较难理解>-<,其实做起来还是比较容易的。只要从父节点往下就行了,根本都还不用通过兄弟节点更新节点。
//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相关推荐
- hdu 2196 树形dp
[题意]:给出一棵树, 每条边有一个权值 求离每个节点最远的点的权值和 看这篇题解学会的 http://tech.ddvip.com/2013-09/1379006959202653.html 树形 ...
- hdu 1520 树形dp
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 #include<cstdio> #include<cstring> # ...
- hdu 5148 树形dp,分组背包
题目: 题目分析: 状态方程: dp[当前节点的标号][当前已经选取的城市数] 设已经选取的城市数是K 初始状态: dp[u][0] = dp[u][1] = 0 , 其他的将值设置为无穷大 树形转移 ...
- Starship Troopers(HDU 1011 树形DP)
题意: 给定n个定点和m个士兵,n个定点最终构成一棵树,每个定点有一定x个bugs和y个value,每20个bug需要消耗一个士兵,不足20也消耗一个,然后最终收获y个value,只有父节点被占领后子 ...
- hdu 5148Cities 树形dp
//dp[u][k1]=min(dp[u][k1-k2]+dp[v][k2]+edge*k2*(k-k2)) //dp[u][k]表示以u节点为根节点的子树中选k个节点所得的最优解 #include& ...
- fwt优化+树形DP HDU 5909
1 //fwt优化+树形DP HDU 5909 2 //见官方题解 3 // BestCoder Round #88 http://bestcoder.hdu.edu.cn/ 4 5 #include ...
- HDU 2196 Computer 树形DP经典题
链接:http://acm.hdu.edu.cn/showproblem.php? pid=2196 题意:每一个电脑都用线连接到了还有一台电脑,连接用的线有一定的长度,最后把全部电脑连成了一棵树,问 ...
- hdu 5909 Tree Cutting——点分治(树形DP转为序列DP)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5909 点分治的话,每次要做一次树形DP:但时间应该是 siz*m2 的.可以用 FWT 变成 siz*ml ...
- HDU 1520 Anniversary party(树形dp)
HDU 1520 Anniversary party(树形dp) 树形dp第一题!!! 题意很清晰,思路也很明确.很容易找到根节点,即最大的boss,通过根节点向下dp. 状态转移方程: int to ...
- hdu 1561 The more, The Better 树形dp
http://acm.hdu.edu.cn/showproblem.php?pid=1561 做树形dp比较小. 先上网学习下,总结下套路. dp[i][j]表示在第i个节点,有j个名额选的时候的最大 ...
最新文章
- 数据结构 python的书推荐-java数据结构书一般推荐看什么好?
- 从零开始Code Review
- Android apk动态加载机制的研究(二):资源加载和activity生命周期管理
- Flink + Iceberg 在去哪儿的实时数仓实践
- VC 为静态控件添加事件
- wpspbc按钮是什么意思_AC只是英文单词缩写,在科技领域常见的有三种意思
- clark变换_电力变换器PWM原理与实践,p43页,空间矢量理解
- spring 读取配置文件
- javax.xml.ws.WebServiceException: Provider com.sun.xml.ws.spi.ProviderImpl not found
- 单片机编程软件很简单(16),Keil单片机编程软件建立工程项目
- Mybatis的一级缓存和二级缓存,看完不再懵逼
- “项目集管理标准体系与PgMP认证”讲座笔记
- gtx1650显卡什么级别! GTX1650相当于什么显卡
- slf4j的包使用说明
- C++控制台实现简单的注册登录
- Android Studio如何查看自己创建的SQLite数据库
- Spring5-Bean的自动装配
- 福禄克DTX-1800其配件DTX-CHA002通道适配器CHANNEL更换RJ45插座小记
- 矩阵特征值和特征向量求解——特征值分解
- 数码相机名词解释-变焦镜头 物距 枕形失真 视角 透视 微距摄影 焦距系数