树上移动(8级)


Submit solution

Points: 100
Time limit: 1.0s
Memory limit: 8M

Author:
Problem type
Allowed languages
C, C++

树上移动(8级)

题意概述

给定一棵含有 \(n\) 个节点的树(节点编号 \(1\sim n\))。每个节点被染成白色黑色。你可以任选起点 \(s\) 和终点 \(t\),沿树上的简单路径(不经过重复节点)从 \(s\) 走到 \(t\)。

要求在经过的黑色节点数不超过 \(k\)(包含端点)的前提下,使路径上经过的节点总数尽可能大。请输出能达到的最大节点数。

注:树上任意两点间的简单路径唯一;"经过的节点数"指路径上不同节点的个数。


输入格式

  • 第一行:两个整数 \(n,k\)——节点数与允许经过的黑色节点上限。
  • 第二行:\(n\) 个整数 \(a_1,a_2,\dots,a_n\),表示每个节点的颜色: \(a_i=0\) 为白色,\(a_i=1\) 为黑色。
  • 接下来 \(n-1\) 行:每行两个整数 \(u_i,v_i\),表示树的一条无向边 \(u_i\text{—}v_i\)。

输出格式

输出一个整数,表示在"黑色节点数 \(\le k\)"约束下,能经过的最大节点数。


样例

输入
5 1
0 0 1 1 1
1 2
2 3
2 5
1 4
输出
3

说明与提示

子任务编号 数据点占比 \(n\) \(k\) 特殊性质
\(1\) \(20%\) \(\le 100\) \(\le 100\) 树的形态为链
\(2\) \(20%\) \(\le 1000\) \(0\)
\(3\) \(60%\) \(\le 1000\) \(\le 1000\)
  • 对于全部数据:\(1\le n\le 1000\),\(0\le k\le 1000\),\(0\le a_i\le 1\)。
  • 黑色节点计数包含路径两端点在内。

Comments

There are no comments at the moment.