这道题的难点其实是在设DP方程,见过就应该会了

令f0,i表示先激发i的父亲,再激发i,把i的整棵子树都激发的最小费用

f1,i表示先激发i,再激发i的父亲,把i的整棵子树都激发的最小费用

设x,y为i的孩子,先激发x再激发i再激发y有

f0,i=∑(f1,y-cy)+∑f0,x+di-cfa

f1,i=∑(f1,y-cy)+∑f0,x+di

其中差的只有cfa,即0<=f1,i-f0,i<=1,对于typeA就容易做了,若两者相等就选f1,它可以消父亲,否则选f0,因为父亲消的次数有限,而即使消了也只是和选f0得到相同的结果

对于TypeB做树上背包,Fi,j表示第i个点,孩子节点给它贡献了j的最小费用,更新f0,f1

我码力太弱了。。在判断i是否已经被全部消完的时候f0和1要分开判。。。

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std; struct node
{
int x,y,next;
}a[];int len,last[];
void ins(int x,int y)
{
len++;
a[len].x=x;a[len].y=y;
a[len].next=last[x];last[x]=len;
} int n,d[],c[]; bool type;
int f[][],F[][],li[],t[];
void dfs(int x,int fr)
{
if(type==false)
{
f[][x]=max(d[x]-c[fr],);
f[][x]=d[x];
}
else F[x][]=;
int sumc=;
for(int k=last[x];k;k=a[k].next)
{
int y=a[k].y;
if(y!=fr)
{
dfs(y,x);sumc+=c[y];
if(type==false)
{
if(f[][y]==f[][y])
{
f[][x]+=f[][y]-c[y]*((d[x]-c[fr])>=c[y]);
f[][x]+=f[][y]-c[y]*(d[x]>=c[y]);
d[x]-=c[y];
}
else
f[][x]+=f[][y], f[][x]+=f[][y];
}
else
{
memset(t,,sizeof(t));
for(int i=min(sumc,li[x]);i>=;i--)t[i]=F[x][i]+f[][y];
for(int i=min(sumc,li[x]);i>=;i--)
{
int u=min(sumc,i+c[y]);
if(i+c[y]>li[x])t[u]=min(t[u],F[x][i]+f[][y]);
else t[u]=min(F[x][u]+f[][y],F[x][i]+f[][y]);
}
memcpy(F[x],t,sizeof(F[x]));
li[x]+=c[y];
}
}
}
if(type==true)
{
for(int i=min(sumc,li[x]);i>=;i--)
{
f[][x]=min(f[][x],F[x][i]+max(d[x]-i-c[fr],));
f[][x]=min(f[][x],F[x][i]+max(d[x]-i,));
}
}
} int main()
{
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&d[i]);
type=false;
for(int i=;i<=n;i++)
scanf("%d",&c[i]),type|=(c[i]>); int x,y;
for(int i=;i<n;i++)
{
scanf("%d%d",&x,&y);
ins(x,y),ins(y,x);
}
memset(f,,sizeof(f));
memset(F,,sizeof(F));
dfs(,);
printf("%d\n",f[][]); return ;
}

bzoj4593: [Shoi2015]聚变反应炉的更多相关文章

  1. 洛谷 P4269 / loj 2041 [SHOI2015] 聚变反应炉 题解【贪心】【DP】

    树上游戏..二合一? 题目描述 曾经发明了零件组装机的发明家 SHTSC 又公开了他的新发明:聚变反应炉--一种可以产生大量清洁能量的神秘装置. 众所周知,利用核聚变产生的能量有两个难点:一是控制核聚 ...

  2. [SHOI2015]聚变反应炉[树dp、贪心]

    题意 给定一棵 \(n\) 个点的树,每个点有一个启动能量 \(d\) 和传递能量 \(c\) ,如果一个点被启动了,就会向和他直接相连的点发送 \(c\) 的能量,初始所有节点能量为0,问最少多少能 ...

  3. 【LOJ】#2041. 「SHOI2015」聚变反应炉

    题解 这显然是一道题拆成两道 然后我胡乱分析了一波,决定第一题就用点度贪心(反正散播的能量肯定能被使用),然后过了 第二题开始mengbier 设\(f_u\)表示第u个点在父亲发动之后才发动的最小价 ...

  4. [暑假的bzoj刷水记录]

    (这篇我就不信有网站来扣) 这个暑假打算刷刷题啥的 但是写博客好累啊  堆一起算了 隔一段更新一下.  7月27号之前刷的的就不写了 , 写的累 代码不贴了,可以找我要啊.. 2017.8.27upd ...

  5. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  6. SHOI做题记录

    LOJ #2027. 「SHOI2016」黑暗前的幻想乡 考虑到每个公司一条边,那就等价于没有任何一家公司没有边. 然后就可以容斥+矩阵树定理,没了. LOJ #2028. 「SHOI2016」随机序 ...

  7. 微信小程序开发视频教程新鲜出炉

    微信小程序开发公测了,可是对于新手来说,不同的框架不同的开发机制,如何快速适应呢?微信小程序开发视频教程新鲜出炉了,从零开始一步一步搭建微信小程序,每个章节都会涉及到不同的知识点,等教程学习完你不但掌 ...

  8. 刚写完的商城erp + 这个商城前台,新鲜出炉。自己1个人写, 包括php框架和前端html页面.

    刚写完的商城erp + 这个商城前台,新鲜出炉.自己1个人写, 包括php框架和前端html页面. 刚写完的商城erp + 这个商城前台,新鲜出炉.自己1个人写, 包括php框架和前端html页面.

  9. 23套新鲜出炉的网站和手机界面 PSD 素材

    Web 用户界面,移动用户界面和线框套件对设计师很有用,因为这些套件让他们使用快速和有效的方式复制用户界面.这些类型的工具包提供了一个基本的用户界面元素,用于它们需要制作的网站或软件模型. 在这篇文章 ...

随机推荐

  1. zoj 2727 List the Books

    List the Books Time Limit: 2 Seconds      Memory Limit: 65536 KB Jim is fond of reading books, and h ...

  2. Flask设计带认证token的RESTful API接口[翻译]

    上一篇文章, 使用python的Flask实现一个RESTful API服务器端  简单地演示了Flask实的现的api服务器,里面提到了因为无状态的原则,没有session cookies,如果访问 ...

  3. 七牛云成功通过 CMMI3 认证

    10 月 31 日,在上海七牛信息技术有限公司青岛会议室举行的 CMMI3 级认证结果发布会上,主任评估师王庆付老师和评估组向公司高层及参与评审的 EPG 成员及项目组成员郑重宣布:经过严格的现场审核 ...

  4. Java并发编程:自己动手写一把可重入锁

    关于线程安全的例子,我前面的文章Java并发编程:线程安全和ThreadLocal里面提到了,简而言之就是多个线程在同时访问或修改公共资源的时候,由于不同线程抢占公共资源而导致的结果不确定性,就是在并 ...

  5. [POJ2594] Treasure Exploration(最小路径覆盖-传递闭包 + 匈牙利算法)

    传送门 引子: 有一个问题,是对于一个图上的所有点,用不相交的路径把他们覆盖,使得每个点有且仅属于一条路径,且这个路径数量尽量小. 对于这个问题可以把直接有边相连的两点 x —> y,建一个二分 ...

  6. 洛谷P1276 校门外的树(增强版)未完工

    题目描述 校门外马路上本来从编号0到L,每一编号的位置都有1棵树.有砍树者每次从编号A到B处连续砍掉每1棵树,就连树苗也不放过(记 0 A B ,含A和B):幸运的是还有植树者每次从编号C到D 中凡是 ...

  7. BZOJ 1509[NOI 2003]逃学的小孩 树形dp

    1509: [NOI2003]逃学的小孩 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 995  Solved: 505[Submit][Status][ ...

  8. Codeforces Round #294 (Div. 2) D. A and B and Interesting Substrings [dp 前缀和 ]

    传送门 D. A and B and Interesting Substrings time limit per test 2 seconds memory limit per test 256 me ...

  9. Delphi:解决重绘造成的窗体闪烁问题

    解决窗体闪烁问题 具体代码: 1.在声明窗体类时加入:   private     procedure CreateParams(var Params: TCreateParams); overrid ...

  10. 微服务 Framework

    Dubbo :https://github.com/dubbo Spring Cloud :https://github.com/spring-cloud