链接:https://ac.nowcoder.com/acm/problem/13249
来源:牛客网

题目描述
一棵n个点的有根树,1号点为根,相邻的两个节点之间的距离为1。树上每个节点i对应一个值k[i]。每个点都有一个颜色,初始的时候所有点都是白色的。
你需要通过一系列操作使得最终每个点变成黑色。每次操作需要选择一个节点i,i必须是白色的,然后i到根的链上(包括节点i与根)所有与节点i距离小于k[i]的点都会变黑,已经是黑的点保持为黑。问最少使用几次操作能把整棵树变黑。
输入描述:
第一行一个整数n (1 ≤ n ≤ 10^5)
接下来n-1行,每行一个整数,依次为2号点到n号点父亲的编号。
最后一行n个整数为k[i] (1 ≤ k[i] ≤ 10^5)

样例解释:
对节点3操作,导致节点2与节点3变黑
对节点4操作,导致节点4变黑
对节点1操作,导致节点1变黑
输出描述:
一个数表示最少操作次数
示例1
输入
复制
4
1
2
1
1 2 2 1
输出
复制
3
我们从每个叶子节点往上回溯。
如果子树里面的点染不到这个点就ans++,然后将这个点的染色值传上去。
如果可以染到这个点,就更新父节点的染色值,然后记录当前节点染色到的最大值,并且返回。
代码如下:

#include<bits/stdc++.h>
#define ll long long
using namespace std;const int maxx=1e5+100;
struct node{int to;int next;
}e[maxx<<1];
int tot,head[maxx<<1],k[maxx],fa[maxx],n;
/*----------事前准备---------*/
inline void init()
{memset(head,-1,sizeof(head));tot=0;
}
inline void add(int u,int v)
{e[tot].to=v,e[tot].next=head[u],head[u]=tot++;
}
/*---------树形dp----------*/
inline int dfs(int u,int f,int &ans)
{fa[u]=f;int now=0;for(int i=head[u];i!=-1;i=e[i].next){int to=e[i].to;if(to==f) continue;now=max(now,dfs(to,u,ans));}if(now<=1)//子树里面的点染不到当前的节点{ans++;return k[u];}k[f]=max(k[f],k[u]-1);//如果能够染到的话,就更新父亲节点的染色值,取最大值return now-1;
}int main()
{int x;while(~scanf("%d",&n)){init();for(int i=2;i<=n;i++){scanf("%d",&x);add(i,x);add(x,i);}for(int i=1;i<=n;i++) scanf("%d",&k[i]);int ans=0;dfs(1,0,ans);cout<<ans<<endl;}return 0;
}

努力加油a啊,(o)/~

黑白树(牛客网+树形dp)相关推荐

  1. 树——牛客网刷题第三波

    又开始作树这一块的了,还是比较顺的,正确率保持在85%以上,以后补充下模糊点,看清题目,这一块就稳了. 1.若平衡二叉树的高度为6,且所有非叶结点的平衡因子均为1,则该平衡二叉树的结点总数为(B). ...

  2. 树——牛客网刷题第一波

    做一下数据结构吧,这一块分的也比较细,每个大知识点就是一个专项,那就从树开始吧: 1.不同的求最小生成树的方法最后得到的生成树是相同的(B) A. 对 B. 错 解析:最小生成树是无向图的连通子图.从 ...

  3. 【牛客 - 157D】插排树(dfs,树形dp)

    题干: 链接:https://ac.nowcoder.com/acm/contest/157/D 来源:牛客网 一年一度的山东省oi夏令营又开始了,每到这个季节,山东的oier们都会欢聚这里,一起学( ...

  4. 牛客网暑期ACM多校训练营(第二场): H. travel(树形线头DP)

    链接:https://ac.nowcoder.com/acm/contest/140/H 来源:牛客网 题目描述 White Cloud has a tree with n nodes.The roo ...

  5. 树的距离(牛客网树上主席树+dfs序)

    链接:https://ac.nowcoder.com/acm/problem/14415 来源:牛客网 题目描述 wyf非常喜欢树.一棵有根数树上有N个节点,1号点是他的根,每条边都有一个距离,而wy ...

  6. codeforces(牛客网dp专题,排序)

    链接:https://ac.nowcoder.com/acm/problem/21314 来源:牛客网 牛牛正在打一场CF 比赛时间为T分钟,有N道题,可以在比赛时间内的任意时间提交代码 第i道题的分 ...

  7. 牛客网 2018年全国多校算法寒假训练营练习比赛(第五场) H.Tree Recovery-完全版线段树(区间更新、区间求和)...

    H.Tree Recovery 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言262144K 64bit IO Format: %lld 链接:https:/ ...

  8. 牛客网暑期ACM多校训练营(第四场): B. Interval Revisited(DP)

    链接:https://ac.nowcoder.com/acm/contest/142/B 来源:牛客网 题目描述 Chiaki has a long interval [1,m] and n smal ...

  9. 牛客网 G-送分了 QAQ 数位 dp入门

    时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 链接: https://www.nowcode ...

最新文章

  1. java foreach order_Java 8流中的forEach vs forEachOrdered
  2. CORS 请求未能成功_CORS 测试 提示错误 Reason: header authorization
  3. Android入门之常用控件
  4. 兼容各种浏览器的自动左右滚动兼左右点击滚动代码
  5. 墨奇科技:生物识别进入可信发展驱动的新阶段
  6. 动态规划求解0-1背包问题
  7. maven构建Spring项目
  8. websettings 哪里设置_江阴整站优化哪里好
  9. 【原】基于matlab的蓝色车牌定位与识别---绪论
  10. 使用思博伦Spirent TsetCenter测试RFC 2544(1)_开始 _双极未来
  11. ubuntu磁盘空间清理
  12. Android网络请求框架Velley的用法与解析
  13. Gartner发布《2021年RPA魔力象限》,两家中国企业首次入选,开创历史!
  14. 解决谷歌浏览器主页被篡改问题
  15. 分卷压缩 C#代码实现
  16. 健身服务公司iFIT赴美上市,64亿美元估值中藏着“喜”与“忧”?
  17. 32层3D NAND速度直逼内存,长江存储是在画饼吗?
  18. 如何给PDF文件去水印,10秒轻松搞定
  19. python荣联云通讯短信平台
  20. 计算机电脑关机后可以充电吗,电脑关机了还能充电吗

热门文章

  1. ios15之取消UITabbleViewCell的高亮效果
  2. 成都python数据分析师职业技能_想成为数据分析师,需要重点学习什么技能?
  3. 截图识字工具下载使用
  4. java.net.UnknownServiceException: CLEARTEXT communication to wanandroid.com not permitted by network
  5. atom mysql插件_Atom 必备插件
  6. Android开发之android与JS互调 | Android与H5互调(附源码)
  7. Android开发之shape画圆环的方法
  8. Android23版本以上删除HttpClient的解决办法
  9. key map 模糊查找_lua脚本语言批量删除模糊查询的key
  10. 我的世界java版记分板_我的世界计分板指令 如何使用计分板教程