CF293E Close Vertices
题目描述
给定一棵有 $n$ 个节点的带权树。每条边都有一个非负权值。任意两个节点之间路径的长度指的是路径上的边数。路径的权重指的是路径上所有边的权值之和。
如果存在一条长度不超过 $l$ 且权重不超过 $w$ 的路径连接两个顶点,我们称这两个顶点是“相近的”。
请计算有多少对顶点 $(v,u)$(满足 $v < u$),使得 $v$ 和 $u$ 是“相近的”。
输入格式
第一行包含三个整数 $n$、$l$ 和 $w$,满足 $1\leq n\leq 10^5$,$1\leq l\leq n$,$0\leq w\leq 10^9$。
接下来的 $n-1$ 行描述树的边。第 $i$ 行包含两个整数 $p_i$、$w_i$,其中 $1\leq p_i < i+1$,$0\leq w_{i}\leq 10^4$,表示第 $i$ 条边连接顶点 $i+1$ 和 $p_i$,其权值为 $w_i$。
树的顶点从 $1$ 到 $n$ 编号。
输出格式
输出一个整数,表示“相近”对的数量。
请不要在 C++ 中使用 %lld 读写 64 位整数。建议使用 cin、cout 流或 %I64d。
说明/提示
由 ChatGPT 5 翻译