사이렌
시간 제한3초메모리 제한1024 MB
가중치가 있는 트리에서 각 방의 사이렌이 거리 d_i 이내의 방을 켜며, 모든 사이렌이 켜지도록 직접 켜야 하는 최소 개수를 구합니다.
문제
지하 벙커는 개의 방으로 이루어져 있고, 방들은 개의 복도로 연결되어 있다. 각 복도는 서로 다른 두 방을 잇고 길이가 정해져 있다. 벙커의 어떤 방 에서든 다른 어떤 방 로 이동할 수 있다. 두 방 사이에는 같은 복도를 두 번 지나지 않는 경로가 정확히 하나 있다. 이 경로에 포함된 복도 길이의 합을 방 와 의 거리라고 부르며 로 표기한다.
각 방에는 사이렌과, 이를 작동시키는 음향 센서가 있다. 방 의 사이렌은 를 만족하는 모든 방 의 센서를 작동시킨다. 여기서 는 그 사이렌의 출력이다. 즉, 방 의 사이렌이 울리면 를 만족하는 방 의 사이렌도 자동으로 울린다. 울린 사이렌은 다시 다른 사이렌을 울릴 수 있다.
비상 상황에서는 일부 사이렌을 수동으로 울려야 한다. 그 소리로 다른 방의 사이렌이 자동으로 울린다. 안전 규정에 따르면, 결국 모든 방의 사이렌이 자동으로 울리도록 수동으로 켤 사이렌의 집합을 골라야 한다.
안전 규정을 만족하는 집합에 속한 사이렌 수의 최솟값을 구하는 프로그램을 작성하라.
입력
첫 줄에 방의 개수 이 주어진다.
둘째 줄에는 정수 개 이 주어진다. 는 방 의 사이렌이 센서를 작동시키는 최대 거리이다 ().
이어지는 개의 줄에는 복도 정보가 주어진다. 번째 줄에는 정수 세 개 , , 가 있다. 와 는 복도로 연결된 서로 다른 방의 번호이고, 는 그 복도의 길이이다 (; ).
출력
수동으로 울려야 하는 사이렌의 최소 개수를 정수 하나로 출력한다.
제한
힌트
테스트에서 4번 방의 사이렌은 5번 방의 사이렌을 울리고, 5번 방의 사이렌은 6번과 7번 방의 사이렌을 울린다. 2번 방의 사이렌은 3번 방의 사이렌을 울린다. 8번 방의 사이렌은 1번, 9번, 10번 방의 사이렌을 울린다.
