Сборка диагностической сети

Просмотр в формате PDF

Submit solution


Очки: 240
Ограничение по времени: 1.0s
Ограничение по памяти: 64M

Автор:
Problem types
Allowed languages
C++, Python

В автосервисе хотят построить внутреннюю диагностическую сеть из n + 1 постов обслуживания. Для этого подготовили n кабелей, и для каждого кабеля известна его длина.

Нужно соединить все посты так, чтобы:

  • каждый кабель был использован ровно один раз;
  • любые два поста были связаны по сети;
  • в сети не было циклов.

Иными словами, необходимо собрать дерево из n + 1 вершин и n рёбер.

Инженеры автосервиса хотят, чтобы максимальное расстояние между двумя постами по суммарной длине кабелей было ровно d.

Для каждого набора кабелей определите, можно ли собрать такую сеть.

Входные данные

В первой строке записано число t — количество наборов данных.

Каждый набор данных состоит из двух строк:

  • в первой строке находятся два целых числа n и d — количество кабелей и требуемый диаметр сети;
  • во второй строке находятся n целых чисел l1, l2, ..., ln, где li — длина i-го кабеля.

Выходные данные

Для каждого набора данных выведите:

  • Yes, если можно собрать дерево с диаметром ровно d;
  • No в противном случае.

Ограничения

  • 1 ≤ t ≤ 1000
  • 1 ≤ n ≤ 2000
  • 1 ≤ d ≤ 2000
  • 1 ≤ li ≤ 2000
  • сумма значений n по всем наборам данных не превышает 2000

Пример

Входные данные
3
3 6
1 2 3
4 7
1 1 2 4
4 5
2 2 2 2
Выходные данные
Yes
Yes
No

Пояснение

В первом наборе можно соединить посты в одну цепочку с длинами кабелей 1, 2 и 3. Тогда диаметр сети будет равен 6.

Во втором наборе можно построить сеть так, чтобы максимальное расстояние между двумя постами оказалось ровно 7.

В третьем наборе из четырёх кабелей длины 2 невозможно собрать дерево, у которого диаметр был бы ровно 5.



Комментарии

Еще нет ни одного комментария.