我们首先考虑叶节点 \(u\),我们必然要向 1 到 \(x\) 的链加上一个权值 \(c\in[l_u,r_u]\),不难发现,由于对一个链加上的权值从根到叶节点满足 \(c_1\le c_2\le c_3\le ...\le c_k\),那么 \(c\) 取最大值 \(r_u\) 自然不劣。接下来考虑非叶节点 \(u\),我们发现所有操作中加到了 \(u\) 子节点 \(v\in Son_u\) 的操作必然会操作到 \(u\) 上面,那么对于 \(u\) 的最大加值 \(\max\sum c_u\le \sum\limits_{v\in Son_u}\max\sum c_v\),我们不妨记这个最大加值为 \(add\),则有如下几种情况:

  1. \(add<l_u\) 那么我们必然需要向 \(1\) 到 \(u\) 的链进行一次操作,此时与在叶节点时同理,应该增加权值 \(r_u-add\) 使得 \(add\) 最大化为 \(r_u\)。
  2. \(add\in[l_u,r_u]\) 此时我们无需对此节点进行操作。
  3. \(add>r_u\) 那么我们对于节点 \(u\) 的加值超过了上限,所以我们应该将 \(add\) 下调为 \(r_u\) 之后再上传至其父节点。

于是我们就可以愉快地进行 dfs 了。

CODE

#include<bits/stdc++.h>
using namespace std;
#define int long long
vector<int> e[200005];
int f[200005],n,ans,t;
struct node{
int l,r;
}a[200005];
int dfs(int x){
if(e[x].empty()){ans++;return a[x].r;}
int sum=0;
for(auto i:e[x])sum+=dfs(i);
if(sum<a[x].l){ans++;return a[x].r;}
return min(sum,a[x].r);
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>t;
while(t--){
ans=0;
cin>>n;
for(int i=1;i<=n;i++)e[i].clear();
for(int i=2;i<=n;i++){cin>>f[i];e[f[i]].push_back(i);}
for(int i=1;i<=n;i++)cin>>a[i].l>>a[i].r;
dfs(1);
cout<<ans<<endl;
}
return 0;
}

CF1693B Fake Plastic Trees 题解的更多相关文章

  1. Hdoj 1392.Surround the Trees 题解

    Problem Description There are a lot of trees in an area. A peasant wants to buy a rope to surround a ...

  2. Gym.102059: 2018-2019 XIX Open Cup, Grand Prix of Korea(寒假gym自训第一场)

    整体来说,这一场的质量比较高,但是题意也有些难懂. E.Electronic Circuit 题意:  给你N个点,M根线,问它是否是一个合法的电路. 思路:  一个合法的电路,经过一些串联并联关系, ...

  3. Validate Binary Search Tree leetcode java

    题目: Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is define ...

  4. 【leetcode刷题笔记】Validate Binary Search Tree

    Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defined as ...

  5. 算法与数据结构基础 - 二叉树(Binary Tree)

    二叉树基础 满足这样性质的树称为二叉树:空树或节点最多有两个子树,称为左子树.右子树, 左右子树节点同样最多有两个子树. 二叉树是递归定义的,因而常用递归/DFS的思想处理二叉树相关问题,例如Leet ...

  6. 算法与数据结构基础 - 递归(Recursion)

    递归基础 递归(Recursion)是常见常用的算法,是DFS.分治法.回溯.二叉树遍历等方法的基础,典型的应用递归的问题有求阶乘.汉诺塔.斐波那契数列等,可视化过程. 应用递归算法一般分三步,一是定 ...

  7. 算法与数据结构基础 - 图(Graph)

    图基础 图(Graph)应用广泛,程序中可用邻接表和邻接矩阵表示图.依据不同维度,图可以分为有向图/无向图.有权图/无权图.连通图/非连通图.循环图/非循环图,有向图中的顶点具有入度/出度的概念. 面 ...

  8. 算法与数据结构基础 - 深度优先搜索(DFS)

    DFS基础 深度优先搜索(Depth First Search)是一种搜索思路,相比广度优先搜索(BFS),DFS对每一个分枝路径深入到不能再深入为止,其应用于树/图的遍历.嵌套关系处理.回溯等,可以 ...

  9. 【Leetcode周赛】从contest-81开始。(一般是10个contest写一篇文章)

    Contest 81 (2018年11月8日,周四,凌晨) 链接:https://leetcode.com/contest/weekly-contest-81 比赛情况记录:结果:3/4, ranki ...

  10. 【fake题解】[NOI2013]向量内积

    [fake题解][NOI2013]向量内积 做法1 大暴力.哪里不会T哪里. 做法2 所有数都%=k不影响结果.(废话 k的取值只有2和3,所以肯定是要分类讨论的.k=2肯定简单些啦. k=2 出现的 ...

随机推荐

  1. html docker效果

    Dock Layout with Flexbox body, html { margin: 0; padding: 0; height: 100%; display: flex; flex-direc ...

  2. 信而泰RENIX 802.1ag功能介绍-网络测试仪实操

    一.EOAM概述​ 1.以太网​ 1.1以太网优点​ 简单易用​ 价格低廉​ 高拓展性​ 大势所趋,一统天下​ 1.2以太网缺点​ 可管理性差​ 定位故障手段少​ 定位故障速度慢​ 维护成本高​ ​ ...

  3. HTTP协议请求/响应格式详解

    HTTP协议请求格式 HTTP请求是浏览器或其他客户端和服务器之间通信的基础.一个HTTP请求由四个部分组成: 请求行(request line) 请求头(headers) 空行(blank line ...

  4. 海康摄像头GB28181语音喊话/双向喊话的配置以及海康摄像头如何在公网GB28181喊话

    @ 目录 1.背景 2.准备 2.1.服务端必备条件(注意) 2.2.准备语音对讲设备 2.2.1.不支持跨网对讲示例 2.2.2. 支持跨网对讲示例 3.开启音频开始对讲 4.搭建GB28181视频 ...

  5. 微软.net表达式编译居然有bug?

    微软.net表达式编译问题困扰本人很久了, 为此我整理了以下case给大家分享 1. 可行性调研 用表达式把一个对象转化为另一个对象 当一个类含有多个同类型属性时,把相同类型转化提取为公共方法 Lam ...

  6. LVM磁盘扩容记录

    Last login: Sat Dec 28 08:35:14 2019 from 172.17.188.7 [root@zabbixserver ~]# ls anaconda-ks.cfg cor ...

  7. nvm安装nodejs 运行use命令时报错exit status 1: ��û���㹻��Ȩ��ִ�д˲�����

    这是因为权限不够,将任务管理器使用管理员身份打开即可:

  8. 【RabbitMQ】消息队列理论部分,另一种环境搭建Docker运行RabbitMQ

    消息队列与RabbitMQ初探 本章学习目标 理解什么是消息队列以及它解决了什么核心问题. 了解RabbitMQ是什么及其在技术生态中的位置. 另一种方式在本地使用Docker快速搭建一个Rabbit ...

  9. [ABC176F] Brave CHAIN

    [ABC176F] Brave CHAIN 题意 给你 \(3n\) 个数字.每次你可以选取前 \(5\) 个数字,拿走里面任意三个数字,剩下两个,如果拿走的 \(3\) 个数字相等,得分 \(+1\ ...

  10. 关于USB 无线 WIF 设备驱动安装的问题

    以厂商出厂时自带的驱动版本为第一优先 USB 无线 WIFI 设备驱动一般不需要更新,更新时也要先选择官方渠道更新​:从设备制造商官网官网下载驱动,避免从芯片厂商(如 Realtek)下载,因为芯片厂 ...