HDU 4799 LIKE vs CANDLE 树形dp
题意:有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的更多相关文章
- hdu 4514 并查集+树形dp
湫湫系列故事——设计风景线 Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tot ...
- [HDU 5293]Tree chain problem(树形dp+树链剖分)
[HDU 5293]Tree chain problem(树形dp+树链剖分) 题面 在一棵树中,给出若干条链和链的权值,求选取不相交的链使得权值和最大. 分析 考虑树形dp,dp[x]表示以x为子树 ...
- HDU 5293 Tree chain problem 树形dp+dfs序+树状数组+LCA
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5293 题意: 给你一些链,每条链都有自己的价值,求不相交不重合的链能够组成的最大价值. 题解: 树形 ...
- hdu 4003 Find Metal Mineral 树形DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4003 Humans have discovered a kind of new metal miner ...
- HDU 5758 Explorer Bo(树形DP)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5758 [题目大意] 给出一棵树,每条路长度为1,允许从一个节点传送到任意一个节点,现在要求在传送次 ...
- 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 ...
- HDU 4123 Bob’s Race 树形dp+单调队列
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4123 Time Limit: 5000/2000 MS (Java/Others) Memory L ...
- hdu 3586 Information Disturbing(树形dp + 二分)
本文出自 http://blog.csdn.net/shuangde800 题目链接: hdu-3586 题意 给一棵n个节点的树,节点编号为1-n,根节点为1.每条边有权值,砍掉一条边要花费 ...
- HDU 1054 Strategic Game(树形DP)
Problem Description Bob enjoys playing computer games, especially strategic games, but sometimes he ...
随机推荐
- npm:Node.js的软件包管理器
npm https://www.npmjs.com/ 2016-08-03
- openwrt虚拟机的network unreachable
之前在hyper-v中装了openwrt的ATTITUDE ADJUSTMENT (12.09, r36088)这个最新版本 我之前的文章有提到怎么安装 link 但是发现用opkg update不能 ...
- iOS之多线程浅谈
1)并发和并行的区别 在软件开发中不可避免的会遇到多线程的问题,在iOS客户端开发(或者.NET的winform或者wpf这样的cs程序)中就更不可避免的会用到多线程,在bs类型的web项目中要考虑一 ...
- Python设计模式——工厂方法模式(FactoryMethod)
需求:有一个学雷锋活动,有买米和扫地两个内容,参与的人有大学生和社区志愿者,他们各自的方法不一样. 如果用简单工厂模式实现: #encoding=utf-8 __author__ = 'kevinlu ...
- 使用Memcached、Spring AOP构建数据库前端缓存框架
数据库访问可能是很多网站的瓶颈.动不动就连接池耗尽.内存溢出等.前面已经讲到如果我们的网站是一个分布式的大型站点,那么使用 memcached实现数据库的前端缓存是个很不错的选择:但如果网站本身足够小 ...
- About Interface
http://www.codeproject.com/Articles/18743/Interfaces-in-C-For-Beginners Interface can't have thi ...
- java中获得jar包执行路径的方法
当我们由于某种需要需要的得到jar的路径是可以用下面的方式来获得: basePath = new Solution().getClass().getProtectionDomain().getCode ...
- 怎么修改tomcat默认访问首页
一般情况下安装好tomcat之后我们的默认访问首页是index了,但我们如果要修改或增加一个默认首页,我们可参考下面办法来解决. 通过 ip:port 访问到的是 tomcat 的管理页面,其他常规部 ...
- 了解实时媒体的播放(RTP/RTCP 和 RTSP)
http://blog.csdn.net/span76/article/details/12913307 RTP/RTCP RTP是基于 UDP协议的, UDP不用建立连接,效率更高:但允许丢包, 这 ...
- BIOS与CMOS有什么区别
本文介绍BIOS与CMOS区别,BIOS是什么?BIOS全称Basic Input/Output System,所以BIOS本身个是系统简称,所以我们常说的BIOS芯片确切的讲是写有BIOS系统的芯片 ...