만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

대역폭 관리

시간 제한2초메모리 제한1024 MB

요약
트리의 각 정점에 사용량 한도가 있고, 경로에 대역폭을 더하는 예약이 순서대로 주어진다. 모든 정점이 한도를 넘지 않는 가장 긴 예약 앞부분의 길이를 구합니다.
난이도

어려움10점 중 8점

유형
트리, 누적 합, 이분 탐색
정답자
아직 제출이 없습니다

문제

당신은 shake! 대회의 네트워크 관리자다. 모든 네트워크의 사용은 예약 큐에 등록한 뒤 당신의 승인을 받아야 이루어진다.

놀랍게도 네트워크는 트리 구조의 그래프이다. 네트워크의 각 정점은 11번부터 NN번까지 번호가 붙어 있고, 모든 간선은 양방향이다.

각 예약은 x,y,wx,y,w로 표현된다. 각 정점의 초기 대역폭 사용량은 00이다. 예약이 승인되면 xx번 정점과 yy번 정점을 잇는 최단 경로에 포함된 모든 정점의 대역폭 사용량이 ww만큼 증가한다. 이때 최단 경로는 양 끝인 xx번 정점과 yy번 정점을 포함한다.

그런데 각 정점에는 한계 대역폭이 있어, 대역폭을 과다하게 사용하면 전체 서버가 다운된다. 네트워크 관리자로서 이것은 용납할 수 없다. 즉, 어떤 정점의 대역폭 사용량도 그 정점의 한계 대역폭을 넘으면 안 된다. 또한 큐의 순서가 중요하므로, 앞선 예약을 받지 않고 이후 예약을 승인할 수 없다. 예를 들어 11번, 22번, 33번 예약을 모두 받거나 아무 예약도 받지 않을 수 있다. 하지만 11번, 33번 예약만 받거나 22번, 33번 예약만 받을 수는 없다.

승인할 수 있는 최대 예약 수를 구하라.

입력

첫째 줄에 네트워크의 정점 개수 NN과 예약 개수 MM이 공백으로 구분되어 주어진다. (2≤N,M≤100 000)(2\le N,M\le 100\,000)

다음 N−1N-1개의 줄에 네트워크의 각 간선이 잇는 두 정점의 번호 uu, vv가 공백으로 구분되어 주어진다. (1≤u,v≤N;u≠v)(1\le u,v \le N; u\ne v)

다음 줄에 NN개의 정수 A1,A2,…,ANA_1,A_2,\dots,A_N이 공백으로 구분되어 주어진다. AiA_i는 ii번 정점의 한계 대역폭이다. (0≤Ai≤109)(0\le A_i\le10^9)

다음 MM개의 줄에 각 예약을 나타내는 정수 x,y,wx,y,w가 큐에 등록된 순서대로 주어진다. 예약을 승인하면 xx번 정점과 yy번 정점을 잇는 최단 경로에 포함된 모든 정점의 대역폭 사용량이 ww만큼 증가한다. (1≤w≤109;1≤x,y≤N)(1\le w\le 10^9; 1\le x,y\le N)

입력으로 주어지는 네트워크는 트리 구조이다.

출력

승인할 수 있는 최대 예약 수를 정수 하나로 출력한다.

예제1

  1. 예제 1

    입력
    3 2
    1 2
    2 3
    5 5 5
    2 1 5
    3 2 5
    
    예상 출력
    1