CF682C Alyona and the Tree
题意翻译
题目描述
给你一棵树,边与节点都有权值,根节点为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的节点的父节点以及该边的边权
输出格式:
一个整数,最少需要删除的点的个数
输入输出样例
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
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相关推荐
- 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 ...
- Codeforces 739B Alyona and a tree (树上路径倍增及差分)
题目链接 Alyona and a tree 弄了好几个小时终于Accepted了,之后发现这个题是Div1的. 比较考验我思维的一道好题. 首先,做一遍DFS预处理出t[i][j]和d[i][j]. ...
- 题解 CF682C 【Alyona and the Tree】
简单搜索题,我们每找到一组不满足题目给出条件的点和边就将其整个子树删除,然后最终答案加上该子树的大小即可.注意,搜索的时候如果当前的边权和sum已经为负了,应该将其改为0(可以想想为什么) 注:题目翻 ...
- Alyona and a tree (树上倍增+差分)
题意: 来源(洛谷翻译 题解: 首先先转化一下问题,题目问当前结点(u)的子树中有多少个孩子(设为v)满足dis(u,v)<=a[v],那么我们可以统计每个结点分别对哪些结点做出了贡献. 首先考 ...
- Codeforces Round #381 (Div. 2)
做不出题就来打一场模拟赛吧! http://codeforces.com/contest/740 A. Alyona and copybooks 水,直接暴力for吧,特判容易被HACK 1 #inc ...
- 有趣题目和认知合集(持续更新)
写写对一些算法的理解,挂几个有意思的题,可能也会挂几个板子题 算法理解偏向于能懂即可,没有严格的证明 快乐几何 [1.2]Volatile Kite 点到直线 快乐搜与暴力 [2.4]Short Co ...
- 近期刷题总结 [19 03 17]
目录 P3703 [SDOI2017]树点涂色 [LCT + 线段树] CF739B Alyona and a tree [主席树] P4098 [HEOI2013]ALO [双向链表 + 可持久化0 ...
- CCPC-Wannafly Summer Camp 2019 全记录
// 7.19-7.29 东北大学秦皇岛校区十天训练营,题目都挂在了Vjudge上.训练期间比较忙,没空更博总结,回来继续补题消化. Day1 这天授课主题是简单图论,节奏挺好,wls两小时理完图论里 ...
- linux 初始化文件失败,linux(十)之初始化文件
前面写了很多linux的知识,其实很多都是命令的,所以要去多多的练习才能学的更好,加油为了好工作. 要么现在懒惰,未来讨饭.要么现在努力,未来惬意. 一.初始化文件概述 1.1.概述 系统初始化文件是 ...
最新文章
- 实验三linux服务与进程管理,Linux 进程与服务管理1
- [SAP ABAP开发技术总结]EXIT-COMMAND
- 数字人民币解密:数字人民币的系统架构、产品形态是什么样的?
- JAVA项目中classpath路径详解
- 软件测试 学习之路 linux基础命令 (二)
- 74ls161中rco是什么_什么是催化燃烧?如何选择催化燃烧设备?RCO和RTO有什么关系?...
- 迅为IMX6ULL开发板Linux下电容触摸屏实验-实验程序编写
- linux编译安装openssl-3.0.2
- 多角度看微积分基本定理
- 中国机器人界“诺贝尔奖”!深眸科技实力斩获恰佩克年度创新品牌奖
- char[]和char* 输出长度不同
- layui搭建后台管理系统
- 【java】springboot项目启动数据加载内存中的三种方法
- 牛客网sql练习题解(22-32)
- 【NVM】node多个版本管理工具安装步骤以及使用
- 模块预制式数据中心方案评估与建议
- Dart语言检测变量类型
- 【Java基础】迷宫问题的Java代码实现
- 2011“国信蓝点杯“软件大赛模拟题java本科组(答案)
- Java初级基础之代码块
热门文章
- python微信聊天机器人_python实战项目,使用itchat模块制作微信聊天机器人
- java发送和接收文件_Java通过套接字发送和接收文件(byte [])
- ajax获取网页新闻,基于Ajax的新闻网页动态数据的抓取方法及系统
- linux系统udp通信程序,Linux UDP socket编程(UDP通讯模型) | C/C++程序员之家
- php数据库图片读取不出来,图片显示不出来,但是数据库里有显示
- LISP标注路线桩号_CAD插件标桩号的AutoLISP程序语言求解释并译成中文,谢谢
- oracle实现分段,用Oracle分段空间管理功能改进数据库性能
- python四大高阶函数求导_4个python常用高阶函数的使用方法
- 编辑流程图_如何使用ProcessOn快速绘制一张高颜值流程图?
- python可以实现什么黑科技_Python黑科技之元类