아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

홍준이와 가능한 집합

시간 제한3초메모리 제한512 MB

요약
가중치가 있는 트리에서 최댓값과 최솟값의 차이가 d 이하인 연결된 공집합 아닌 정점 부분집합의 개수를 센다.
난이도

어려움10점 중 8점

유형
트리, DFS, 분할 정복, 동적 계획법
정답자
아직 제출이 없습니다

문제

NN개의 정점으로 이루어진 트리가 있습니다. ii번 정점에는 가중치 a(i)a(i)가 붙어 있습니다. 여기에 정수 dd가 하나 주어질 때, 다음 조건을 모두 만족하는 트리의 정점 집합 SS를 "가능한 집합"이라고 합니다.

  1. SS는 공집합이 아닙니다.
  2. SS에 속한 정점은 서로 연결되어 있습니다. 즉, SS에 속한 두 정점 uu와 vv를 잇는 경로 위의 모든 정점이 SS에 속해야 합니다.
  3. max⁡u∈Sa(u)−min⁡v∈Sa(v)≤d\max_{u \in S} a(u) - \min_{v \in S} a(v) \le d

"가능한 집합" SS가 몇 개인지 세는 프로그램을 작성하세요. 답이 매우 커질 수 있으므로 109+710^9+7로 나눈 나머지를 출력합니다.

입력

첫째 줄에 dd와 NN이 주어집니다. (0≤d≤200000 \le d \le 20000, 1≤N≤200001 \le N \le 20000)

둘째 줄에 a(i)a(i)를 나타내는 NN개의 정수가 a(1)a(1)부터 순서대로 주어집니다. (1≤a(i)≤200001 \le a(i) \le 20000)

셋째 줄부터 N−1N-1개의 줄에 걸쳐 트리의 간선을 나타내는 두 정수 uu와 vv가 주어집니다. (1≤u,v≤N1 \le u, v \le N)

출력

가능한 집합의 개수를 109+710^9+7로 나눈 나머지를 첫째 줄에 출력합니다.

힌트

첫 번째 예제에서 가능한 집합은 {1}, {2}, {3}, {4}, {1, 2}, {1, 3}, {3, 4}, {1, 3, 4}의 여덟 가지입니다.

예제2

  1. 예제 1

    입력
    1 4
    2 1 3 2
    1 2
    1 3
    3 4
    
    예상 출력
    8
    
  2. 예제 2

    입력
    0 1
    5
    
    예상 출력
    1