Informatica Online Judge

  경주 [1445 / 05A5]

Time Limit(Test case) : 3000(ms)
Number of users who solved : 7   Total Tried : 9


The Champion of this Problem (C++) : chan4928 - 206ms / 2312byte
My Best Submission (C++) : N/A

[IOI 2011 - Pattaya City, Thailand]

Background

IOI 를 개최하는 파타야 시는 경주대회인 IOR 2011 도 함께 개최하며 이를 위해 가장 적합한 경주코스를 찾고 있다.

파타야 인근 지역에는 N 개의 도시가 있고 N - 1 개의 고속도로가 이 도시들을 연결하고 있다. 각 고속도로는 양방향이며 서로 다른 두 개의 도시를 연결한다. 각 고속도로의 길이는 킬로미터 단위로 나타내며 정수 값이다. 그리고 임의의 두 도시는 직접 고속도로로 연결되지 않더라도 단 하나의 경로에 의해 연결된다. 즉, 같은 도시를 두 번 이상 방문하지 않고 한 도시에서 출발하여 다른 도시에 도착하는 방법은 유일하다.

IOR 에 사용되는 경주코스는 출발 도시와 도착 도시가 서로 달라야 하며 길이는 정확하게 K 킬로미터인 경로이다. 그리고 충돌을 방지하기 위해 한 고속도로를 두 번 이상 사용하지 않는다. (따라서 한 도시도 두 번 이상 방문하지 않는다.) 또한 교통체증을 줄이기 위해 되도록 가장 작은 수의 고속도로를 사용하여 경주코스를 구성하려고 한다.

길이가 K 인 경주코스 중에서 고속도로 수가 가장 작은 경주코스의 고속도로 수를 출력하라. 만약 길이가 K 인 경주코스가 없다면 -1 을 출력하라.

Input

첫째 줄에 N과 K가 주어진다. 둘째 줄부터 N-1개 줄에는 H[i][0], H[i][1], L[i]가 주어진다. (1 ≤ N ≤ 200,000, 1 ≤ K ≤ 1,000,000)

* N – 도시의 수. 각 도시는 0 번부터 N-1 번까지 정수로 나타낸다.
* K – 경주코스의 길이.
* H – 각 고속도로를 나타내는 2 차원 배열. 고속도로 i (0 ≤ i < N-1)는 도시 H[i][0]와 도시 H[i][1]를 연결하는 도로이다.
* L – 고속도로의 길이를 나타내는 1 차원 배열. 고속도로 i (0 ≤ i < N-1)의 길이는 L[i]이다.

[Sub-Task Info]
서브태스크 1 (9점)
* 1 ≤ N ≤ 100
* 1 ≤ K ≤ 100
* 고속도로들이 직선을 이룬다: 고속도로 i 는 (0 ≤ i < N-1) 도시 i 와 도시 i+1 을 연결한다.

서브태스크 2 (12점)
* 1 ≤ N ≤ 1 000
* 1 ≤ K ≤ 1 000 000

서브태스크 3 (22점)
* 1 ≤ N ≤ 200 000
* 1 ≤ K ≤ 100

서브태스크 4 (57점)
추가 제약 조건이 없다.

Output

길이가 K 인 경주코스 중에서 고속도로 수가 가장 작은 경주코스의 고속도로 수를 반환한다. 만약 길이가 K 인 경주코스가 없다면 -1 을 반환하라.

IO Example

입력1
4 3
0 1 1
1 2 2
1 3 4

출력1
2

설명


가능한 경주코스는 도시 0 에서 출발하여 도시 1 을 거쳐 도시 2 에 도착하는 코스이다. 이 코스의 총 길이는 1 km + 2 km = 3 km 이며 2 개의 고속도로를 사용한다.

Submit : [C/C++] | [C++11] | [Obj-C] | [Java] | [Python]
Prob Analysis : [Problem Statistics] | [Solution]