| 题目名称 | 4345. 砍树 |
|---|---|
| 输入输出 | cuttree.in/out |
| 难度等级 | ★★★ |
| 时间限制 | 1000 ms (1 s) |
| 内存限制 | 512 MiB |
| 测试数据 | 10 |
| 题目来源 |
|
| 开放分组 | 全部用户 |
| 提交状态 | |
| 分类标签 | |
| 分享题解 |
| 通过:2, 提交:2, 通过率:100% | ||||
|
|
100 | 0.835 s | 51.34 MiB | C++ |
|
|
100 | 1.170 s | 8.11 MiB | C++ |
| 本题关联比赛 | |||
| ry分享赛 | |||
| 关于 砍树 的近10条评论(全部评论) |
|---|
这不是一道交互题
这里不需要你比较空集的大小
这里不需要你自己配置环境
选手不需要也不应该不实现main函数
你面前有一棵树
这棵树有$n-1$个节点,编号从$0$到$n-1$,由$n-1$根树枝连接
对于点$i$,其有$son_i$个儿子,同时有$p_i$的权值
对于所有点,还有$m$的最大承重量
本题中,一个点$i$的重量计算方式为$w_i=son_i+p_i$
砍掉点$i$的定义是,$i$节点上的权值加到它的父节点的权值上,它的儿子节点连到$i$的父节点上,这个点被删除
你想要知道,最多可以砍掉多少个节点
第一行输入两个正整数,$n$和$m$分别表示节点个数和最大载重
第二行$n$个整数$p_i$,表示第$i$个节点上的权值
接下来$n$行,每行第一个数$son_i$表示这个节点的儿子个数,接下来$son_i$个整数表示这个节点儿子的编号
一行一个整数,表示最多能删除多少节点
10 4 0 2 2 2 4 1 0 4 1 1 3 6 2 3 1 9 1 8 1 1 0 0 2 7 4 0 1 5 0
4
对于$30$%的数据,$n≤5×10^3,m≤100,p_i≤100$
对于$70$%的数据,$n≤2×10^5,m≤2×10^3,p_i≤10^3$
对于$100$%的数据,$n≤2×10^6,m≤10^5,p_i≤10^3$
保证初始时合法