思路:

树形dp。因为最终答案要求的是差值,所以对于每个节点我们只需要考虑差值即可,dp[u][0]表示u节点以下(含u)中like的val比candle的val大的最大值,dp[u][1]表示candle的val值比like大的最大值。所以,对于每个节点我们就可以对于每个子树v:

dp[u][0] += dp[v][0];

dp[u][1] += dp[v][1];

但是对于原来已经翻转过的点,我们要无偿交换swap(dp[u][0], dp[u][1]);这点应该很明确(因为我们本来求的是没有翻转过的,现在由于这一点本来翻转过,导致我们本来求的东西都是相反的,所以要交换一下)。

这样的话就可以使得两个值都最大,然后再考虑翻转的情况,如果翻转的话,那么可以这样更新dp值。

dp[u][0] = max(dp[u][0], dp[u][1] - sub);

dp[u][1] = max(dp[u][1], dp[u][0] - sub);

sub表示翻转需要的代价。

然后需要注意的一点就是对于树根0,我们不能翻转,根据题目可以很容易看出来。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
using namespace std;
const int maxn = 50000+500;
vector<int>e[maxn];
int w[maxn];
int vis[maxn];
int dp[maxn][2];
int n,x,y;
void dfs(int u)
{dp[u][0]=w[u];dp[u][1]=-w[u];for(int i = 0;i<e[u].size();i++){int v = e[u][i];dfs(v);dp[u][0]+=dp[v][0];dp[u][1]+=dp[v][1];}if(u!=0){if(vis[u])swap(dp[u][0],dp[u][1]);dp[u][0]=max(dp[u][0],dp[u][1]-(vis[u]?y:x));dp[u][1]=max(dp[u][1],dp[u][0]-(vis[u]?y:x));}
}
int main()
{while(scanf("%d%d%d",&n,&x,&y)!=EOF){for(int i = 0;i<=n;i++)e[i].clear();memset(dp,0,sizeof(dp));memset(w,0,sizeof(w));memset(vis,0,sizeof(vis));for(int i = 1;i<=n;i++){int fa,flag;scanf("%d%d%d%d",&w[i],&fa,&vis[i],&flag);e[fa].push_back(i);if(flag)w[i]=-w[i];}dfs(0);if(dp[0][0]<0)printf("HAHAHAOMG\n");elseprintf("%d\n",dp[0][0]);}
}

UVALive 6619 LIKE vs CANDLE(树形DP)相关推荐

  1. BNUOJ 52305 Around the World 树形dp

    题目链接: https://www.bnuoj.com/v3/problem_show.php?pid=52305 Around the World Time Limit: 20000msMemory ...

  2. [树形dp] Jzoj P5233 概率博弈

    Description 小A和小B在玩游戏.这个游戏是这样的: 有一棵n个点的以1为根的有根树,叶子有权值.假设有m个叶子,那么树上每个叶子的权值序列就是一个1->m 的排列. 一开始在1号点有 ...

  3. fwt优化+树形DP HDU 5909

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

  4. BZOJ 1040 ZJOI2008 骑士 树形DP

    题目大意:给定一个基环树林,每一个点上有权值,要求选择一个权值和最大的点集,要求点集中的随意两个点之间不能直接相连 最大点独立集--考虑到n<=100W,网络流铁定跑不了,于是我们考虑树形DP ...

  5. POJ 3342 树形DP+Hash

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

  6. [NC15748]旅游 树形dp基础

    菜鸡第一次接触树形dp这个东西,不过这个东西还是很好理解的(可能是因为模板题吧) 个人感觉,相比线性dp,树形dp的状态转移方程更加的直观,难点主要是在"树"的结构上比较麻烦. 题 ...

  7. 容斥 + 树形dp ---- 2021 icpc 沈阳 L Perfect Matchings

    题目链接 题目大意: 就是给你一个2n2n2n个点的完全图,从这个图里面抽出2n−12n-12n−1条边,这些边形成一颗树,现在问你剩下的图里面点进行完美匹配有多少种方案? 解题思路: 一开始被完美匹 ...

  8. 树形dp ---- gym101667 A(贪心 + 树形dp + 两个dp方程组维护)

    题目链接 题目大意: 就是一棵5e35e35e3的树,可以选择一些点,放上基站,如果uuu上的基站价值为ddd,那么距离uuu小于等于ddd的点都会被覆盖,问使得整棵树被覆盖需要的最小价值. 解题思路 ...

  9. 树形dp ---- 2018年杭电多校第二场 H travel

    题目大意: 就是给你一个带点权的树,找到3条独立互不相交的路径使得权值和最大 解题思路: 很经典的树形dp 我们设dp[root][j][k]dp[root][j][k]dp[root][j][k]表 ...

最新文章

  1. 宜人贷YEP技术、数据沉淀背后:金融科技迎来开放赋能时代
  2. IntelliJ IDEA 2017.3.2 热加载(Hot Swap)
  3. C#操作Excel(读取)
  4. 网络相关知识点:nginx相关概念
  5. java学习入门怎么做最为高效
  6. 手动清空Element Select选择框内容 v-model 和 option下拉框选项 导致无法select选中,或者选中视图不渲染问题,
  7. 对话Satya Nadella:大规模AI模型、人机界面或将迎来大突破
  8. 2016 CSU - 1803
  9. mysql分组聚合compute_SQLServer之Compute/ComputeBy实现数据汇总
  10. (三)树莓派系列教程:树莓派4B上编写Python程序(C语言),并运行
  11. 计算机漏洞安全相关的概念POC 、EXP 、VUL 、CVE 、0DAY
  12. Linux 之父亮相,这个开源社区要“搞大事”
  13. 关于OPCUA的配套规范
  14. 三次指数平滑法(Holt-Winters)
  15. 0811 iOS开发完整学习路线
  16. Panabit镜像功能配合wireshark抓包的方法
  17. vue 右键菜单contextMenu
  18. 产品生命周期管理——高效的全生命周期的产品管理方法
  19. 强化学习1-思想及分类
  20. 从微信的成功看移动AppUI设计的精髓

热门文章

  1. Android webview处理404 500 断网 timeout页面的问题(by 星空武哥)
  2. 发表了的论文查重率过高怎么解决?
  3. openinstall与虎扑达成合作,挖掘体育文化产业数据价值
  4. 亚马逊美国站对CPC认证有什么要求
  5. html中队整个文本字体设置,少先队资料.doc
  6. 友盟社会化分享之自定义内容分享到微信,微博,豆瓣
  7. Joomla模板制作教程:joomla模板组成
  8. MYSQL总结(图片来源小林coding)
  9. 《领测老贺聊软件测试》软件测试自媒体频道正式发布
  10. 谁才是物联网连接技术中的王者?