题意翻译

题目描述

给你一棵树,边与节点都有权值,根节点为1,现不停删除叶子节点形成新树,问最少删掉几个点,能使得最后剩下的树内,∀v与其子树内∀u间边权的和小于点u权值

输入输出格式

输入格式:

第一行,节点个数n(1≤n≤1e5)

第二行,n个整数——各节点的权值ai​(1≤ai≤1e9)

接下来的n-1行,每行两个整数pi与ci(1≤pi≤n,−1e9≤ci≤1e9),分别表示编号为i+1的节点的父节点以及该边的边权

输出格式:

一个整数,最少需要删除的点的个数

输入输出样例

输入样例#1:

9
88 22 83 14 95 91 98 53 11
3 24
7 -8
1 67
1 64
9 65
5 12
6 -80
3 8

输出样例#1:

5

代码

思维题。

首先可以转化成保留多少个节点。

然后每次累加取max(0,sum+e[i].val)

比如说我们v[u]=10,而此时sum=-1000,而∑e[i].val=20,显然这种情况是不可法的

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+100;
int v[maxn],head[maxn];
struct edge
{int to,next,val;
}e[maxn];
int cnt=0;
int size=0;
inline int read()
{int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}return x*f;
}
void addedge(int u,int v,int w)
{e[++size].to=v;e[size].val=w;e[size].next=head[u];head[u]=size;
}
void dfs(int u,int sum)
{if(sum>v[u])return;cnt++;for(int i=head[u];i;i=e[i].next){int to=e[i].to;dfs(to,max(0,sum+e[i].val));}
}
int main()
{int n=read();for(int i=1;i<=n;i++)v[i]=read();for(int i=2;i<=n;i++){int v=read(),w=read();addedge(v,i,w);}dfs(1,0);printf("%d",n-cnt);return 0;
}

View Code

转载于:https://www.cnblogs.com/DriverBen/p/11001768.html

CF682C Alyona and the Tree相关推荐

  1. B. Alyona and a tree(dsu on tree + bit)

    B. Alyona and a tree(dsu on tree + bit) 给定一颗以111号节点为根的树,每个点有点权aia_iai​,边有边权,如果vvv控制了点uuu,当且仅当uuu是vvv ...

  2. Codeforces 739B Alyona and a tree (树上路径倍增及差分)

    题目链接 Alyona and a tree 弄了好几个小时终于Accepted了,之后发现这个题是Div1的. 比较考验我思维的一道好题. 首先,做一遍DFS预处理出t[i][j]和d[i][j]. ...

  3. 题解 CF682C 【Alyona and the Tree】

    简单搜索题,我们每找到一组不满足题目给出条件的点和边就将其整个子树删除,然后最终答案加上该子树的大小即可.注意,搜索的时候如果当前的边权和sum已经为负了,应该将其改为0(可以想想为什么) 注:题目翻 ...

  4. Alyona and a tree (树上倍增+差分)

    题意: 来源(洛谷翻译 题解: 首先先转化一下问题,题目问当前结点(u)的子树中有多少个孩子(设为v)满足dis(u,v)<=a[v],那么我们可以统计每个结点分别对哪些结点做出了贡献. 首先考 ...

  5. Codeforces Round #381 (Div. 2)

    做不出题就来打一场模拟赛吧! http://codeforces.com/contest/740 A. Alyona and copybooks 水,直接暴力for吧,特判容易被HACK 1 #inc ...

  6. 有趣题目和认知合集(持续更新)

    写写对一些算法的理解,挂几个有意思的题,可能也会挂几个板子题 算法理解偏向于能懂即可,没有严格的证明 快乐几何 [1.2]Volatile Kite 点到直线 快乐搜与暴力 [2.4]Short Co ...

  7. 近期刷题总结 [19 03 17]

    目录 P3703 [SDOI2017]树点涂色 [LCT + 线段树] CF739B Alyona and a tree [主席树] P4098 [HEOI2013]ALO [双向链表 + 可持久化0 ...

  8. CCPC-Wannafly Summer Camp 2019 全记录

    // 7.19-7.29 东北大学秦皇岛校区十天训练营,题目都挂在了Vjudge上.训练期间比较忙,没空更博总结,回来继续补题消化. Day1 这天授课主题是简单图论,节奏挺好,wls两小时理完图论里 ...

  9. linux 初始化文件失败,linux(十)之初始化文件

    前面写了很多linux的知识,其实很多都是命令的,所以要去多多的练习才能学的更好,加油为了好工作. 要么现在懒惰,未来讨饭.要么现在努力,未来惬意. 一.初始化文件概述 1.1.概述 系统初始化文件是 ...

最新文章

  1. 实验三linux服务与进程管理,Linux 进程与服务管理1
  2. [SAP ABAP开发技术总结]EXIT-COMMAND
  3. 数字人民币解密:数字人民币的系统架构、产品形态是什么样的?
  4. JAVA项目中classpath路径详解
  5. 软件测试 学习之路 linux基础命令 (二)
  6. 74ls161中rco是什么_什么是催化燃烧?如何选择催化燃烧设备?RCO和RTO有什么关系?...
  7. 迅为IMX6ULL开发板Linux下电容触摸屏实验-实验程序编写
  8. linux编译安装openssl-3.0.2
  9. 多角度看微积分基本定理
  10. 中国机器人界“诺贝尔奖”!深眸科技实力斩获恰佩克年度创新品牌奖
  11. char[]和char* 输出长度不同
  12. layui搭建后台管理系统
  13. 【java】springboot项目启动数据加载内存中的三种方法
  14. 牛客网sql练习题解(22-32)
  15. 【NVM】node多个版本管理工具安装步骤以及使用
  16. 模块预制式数据中心方案评估与建议
  17. Dart语言检测变量类型
  18. 【Java基础】迷宫问题的Java代码实现
  19. 2011“国信蓝点杯“软件大赛模拟题java本科组(答案)
  20. Java初级基础之代码块

热门文章

  1. python微信聊天机器人_python实战项目,使用itchat模块制作微信聊天机器人
  2. java发送和接收文件_Java通过套接字发送和接收文件(byte [])
  3. ajax获取网页新闻,基于Ajax的新闻网页动态数据的抓取方法及系统
  4. linux系统udp通信程序,Linux UDP socket编程(UDP通讯模型) | C/C++程序员之家
  5. php数据库图片读取不出来,图片显示不出来,但是数据库里有显示
  6. LISP标注路线桩号_CAD插件标桩号的AutoLISP程序语言求解释并译成中文,谢谢
  7. oracle实现分段,用Oracle分段空间管理功能改进数据库性能
  8. python四大高阶函数求导_4个python常用高阶函数的使用方法
  9. 编辑流程图_如何使用ProcessOn快速绘制一张高颜值流程图?
  10. python可以实现什么黑科技_Python黑科技之元类