题意:有n个人,他们的关系,形成一棵有根树(0是树根,代表管理员),每个人有一个价值

现在有一条微博,每个人要么点赞,要么送一个蜡烛

初始一些人利用bug反转了某些人的操作(赞变蜡烛 或者 蜡烛变成赞)

每当一个人被被反转,那么他的子树跟着反转,即一次反转一棵子树

现在你是管理员,你可以反转这些人的操作,反转次数任意次,

每次反转的代价分两种情况,如果这个人初始通过bug被反转过,代价是Y,否则是X

现在问你作为管理员,如何反转,使得 点赞的人价值总和 - 送蜡烛的人价值总和  最大

输入: 先是n个人,然后代价X,代价Y,然后之后又n行,每一行4个数,代表这个人的价值,他的父节点的人,

初始是否被bug反转过(1表示有,0没有),初始是什么操作(0表示点赞,1表示送蜡烛)

分析:树形dp 对于每个节点 i dp[i][0]表示当前子树,赞的总价值-蜡烛总价值 的最大值

dp[i][1]表示当前子树,蜡烛总价值-赞的总价值 的最大值

然后更新的时候,dp[i][0]=v[i]+max(dp[j][0],dp[j][1]-(fiip[j]?Y:X)) j表示i子树

子树最优有两种情况,dp[j][0],或则由,dp[j][1]反转,减去Y或者X的代价

dp[i][1]是一样的

代码:

#include<cstdio>
#include<cstring>
#include<queue>
#include<cstdlib>
#include<algorithm>
#include<vector>
#include<cmath>
using namespace std;
typedef long long LL;
const int N=5e4+;
const int INF=0x3f3f3f3f;
struct Edge{
int v,next;
}edge[N];
int head[N],tot,dp[N][],val[N],n,flip[N];
int X,Y;
void add(int u,int v){
edge[tot].v=v;
edge[tot].next=head[u];
head[u]=tot++;
}
void dfs(int u,int cur){
if(flip[u])cur^=;
if(cur)val[u]=-val[u];
dp[u][]=val[u],dp[u][]=-val[u];
for(int i=head[u];~i;i=edge[i].next){
int v=edge[i].v;
dfs(v,cur);
dp[u][]+=max(dp[v][],dp[v][]-(flip[v]?Y:X));
dp[u][]+=max(dp[v][],dp[v][]-(flip[v]?Y:X));
}
}
int main(){
while(~scanf("%d%d%d",&n,&X,&Y)){
for(int i=;i<=n;++i)head[i]=-;
tot=;
for(int i=;i<=n;++i){
int f,tp;
scanf("%d%d%d%d",&val[i],&f,&flip[i],&tp);
if(tp)val[i]=-val[i];
add(f,i);
}
dfs(,);
if(dp[][]<)printf("HAHAHAOMG\n");
else printf("%d\n",dp[][]);
}
return ;
}

HDU 4799 LIKE vs CANDLE 树形dp的更多相关文章

  1. hdu 4514 并查集+树形dp

    湫湫系列故事——设计风景线 Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tot ...

  2. [HDU 5293]Tree chain problem(树形dp+树链剖分)

    [HDU 5293]Tree chain problem(树形dp+树链剖分) 题面 在一棵树中,给出若干条链和链的权值,求选取不相交的链使得权值和最大. 分析 考虑树形dp,dp[x]表示以x为子树 ...

  3. HDU 5293 Tree chain problem 树形dp+dfs序+树状数组+LCA

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5293 题意: 给你一些链,每条链都有自己的价值,求不相交不重合的链能够组成的最大价值. 题解: 树形 ...

  4. hdu 4003 Find Metal Mineral 树形DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4003 Humans have discovered a kind of new metal miner ...

  5. HDU 5758 Explorer Bo(树形DP)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5758 [题目大意] 给出一棵树,每条路长度为1,允许从一个节点传送到任意一个节点,现在要求在传送次 ...

  6. 2017 Multi-University Training Contest - Team 1 1003&&HDU 6035 Colorful Tree【树形dp】

    Colorful Tree Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

  7. HDU 4123 Bob’s Race 树形dp+单调队列

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4123 Time Limit: 5000/2000 MS (Java/Others) Memory L ...

  8. hdu 3586 Information Disturbing(树形dp + 二分)

    本文出自   http://blog.csdn.net/shuangde800 题目链接:   hdu-3586 题意 给一棵n个节点的树,节点编号为1-n,根节点为1.每条边有权值,砍掉一条边要花费 ...

  9. HDU 1054 Strategic Game(树形DP)

    Problem Description Bob enjoys playing computer games, especially strategic games, but sometimes he ...

随机推荐

  1. JQuery(三) Ajax相关

    JQuery大大简化了Ajax通用操作,开发者只需要指定请求URL,回调函数即可. 三个主要方法: $().param(obj):将obj参数(对象或数组)转化成查询字符串. {name:" ...

  2. Android开发系列之AChartEngine

    Android图表控件的开发 曾经开发过一个小程序,在Android电视机上面开发一个APP,用于显示一些统计图表的信息.最后找来找去基于Android Native开发有AChartEngine现成 ...

  3. struts2 修改action的后缀

    struts2 修改action的后缀 struts2 的默认后缀是 .action 虽然很直观,但是很烦琐.很多人喜欢将请求的后缀改为 .do 在struts2中修改action后缀有两种比较简单的 ...

  4. Python 列表实现字典的get功能

    字典有一个很好用的方法,就是get,既可以预防KeyError异常,也可以为不存在的key设置一个默认的value 例如: v=d.get('k','default') 而列表没有一个类似的方法,如果 ...

  5. python制作安装包(setup.py)

    1.制作setup.py from distutils.core import setup setup(name='Myblog', version='1.0', description='My Bl ...

  6. 4.MVC框架开发(母版页的应用、按钮导致的Action处理、从界面向控制器传数据和HtmlHelper控件的实现(注册的实现))

    1.在视图里如何引入母版页 1)在视图里母版页都是放在View目录下面的Shared文件夹下面 2)母版页里的RenderBody()类似于ASP.NET里面的ContentPalceHolder占位 ...

  7. CODEVS 1004四子连棋

    [题目描述 Description] 在一个4*4的棋盘上摆放了14颗棋子,其中有7颗白色棋子,7颗黑色棋子,有两个空白地带,任何一颗黑白棋子都可以向上下左右四个方向移动到相邻的空格,这叫行棋一步,黑 ...

  8. VS2015下的Android开发系列01——开发环境配置及注意事项

    概述 VS自2015把Xamarin集成进去后搞Android开发就爽了,不过这安装VS2015完成的时候却是长了不知道多少.废话少说进正题,VS2015安装时注意把Android相关的组件勾选安装, ...

  9. C# - 非中断(正常)模式下的调试

    一般我们用Console.WriteLine()函数,将文本输出到控制台上来跟踪代码进行到了什么位置,局限性很大,适用范围窄. 1. 输出调试信息 命名空间 System.Dignostics Deb ...

  10. python 进程信息

    通过psutil模块读取机器进程信息: #-*- coding: UTF-8 -*-import psutil;import osimport CommMethod '''获取机器当前进程信息'''d ...