60035 주유소 Platinum III

시간 제한: 3.5초 메모리 제한: 1024MB

문제

KOI 국가는 NN개의 마을로 이루어져 있다. 각 마을에는 11번 마을, 22번 마을, \cdots, NN번 마을과 같이 번호가 붙어 있다. 그리고 도로가 N1N - 1개 있는데, 각각의 도로는 서로 다른 두 마을을 잇고 있다. 각 도로에도 11번 도로, 22번 도로, \cdots, N1N - 1번 도로와 같이 번호가 붙어 있다. ii번 도로는 xix_i번 마을과 yiy_i번 마을을 직접 잇고 있다. KOI 국가의 임의의 두 마을에 대해, 두 마을을 잇는 경로가 정확히 하나 존재한다.

xx번 마을과 yy번 마을을 잇는 경로xx번 마을 - z1z_1번 마을 - z2z_2번 마을 - \cdots - ztz_t번 마을 - yy번 마을과 같이 마을로 이루어진 수열 형태를 띤다. 이 수열이 다음 두 성질을 만족할 때 경로라고 부른다.

  • 경로를 이루는 인접한 두 마을 사이, 즉 xx번 마을과 z1z_1번 마을 사이, z1z_1번 마을과 z2z_2번 마을 사이, \cdots, ztz_t번 마을과 yy번 마을 사이를 잇는 도로가 존재한다.
  • 경로에는 같은 마을이 두 번 등장하면 안 된다. 즉, 경로를 이루는 xx번, z1z_1, \cdots, ztz_t번, yy번 마을은 모두 서로 다른 마을이어야 한다.

이 때 경로의 “길이”는, 경로를 이루는 도로의 수, 즉 t+1t + 1로 정의한다.

마을들 중 몇 개의 마을을 골라 주유소를 설치하려 한다. KOI 국가의 법에 따라, 주유소는 다음 조건을 만족하도록 설치해야 한다.

  • 길이 kk인 임의의 경로에, 주유소가 설치된 마을이 적어도 하나 존재해야 한다.

위 조건을 만족하도록 가장 적은 개수의 마을을 골라 주유소를 설치하려 한다. 이 때 설치해야 하는 주유소의 개수의 최솟값을 구하여라.

입력

첫 번째 줄에, 마을의 개수 NN과 조건에 주어진 값 kk가 공백을 사이에 두고 주어진다.

두 번째 줄부터 N1N - 1개의 줄에 걸쳐, 각 도로가 잇고 있는 두 마을의 번호 xix_iyiy_i가 공백을 사이에 두고 주어진다.

출력

첫 번째 줄에, 설치해야 하는 주유소의 개수의 최솟값을 출력하라.

제한

  • 2N2000002 ≤ N ≤ 200\,000
  • 1kN11 ≤ k ≤ N - 1
  • 1xiN1 ≤ x_i ≤ N, 1yiN1 ≤ y_i ≤ N, xiyix_i \ne y_i (1iN11 ≤ i ≤ N - 1)
  • 임의의 두 마을에 대해, 두 마을을 잇는 경로가 정확히 하나 존재한다.
  • 길이 kk인 경로는 적어도 하나 존재한다.
  • 주어지는 모든 수는 정수이다.

서브태스크

번호배점제한
19ii (1iN11 ≤ i ≤ N - 1)번 도로는 ii번 마을과 i+1i + 1번 마을을 잇고 있다.
210k=1k = 1.
311ii (1iN11 ≤ i ≤ N - 1)번 도로는 i+1i + 1번 마을과 (i+1)/2\lfloor (i + 1)/2 \rfloor번 마을을 잇고 있다. (x\lfloor x \rfloorxx 이하인 가장 큰 정수를 의미한다)
412N15N ≤ 15.
515N300N ≤ 300.
617N3000N ≤ 3\,000.
726추가 제약 조건 없음.

예제 입출력

예제 입력 1
6 2
1 2
1 3
2 4
2 5
4 6
예제 출력 1
1
예제 입력 2
7 2
1 2
1 3
2 4
2 5
4 6
6 7
예제 출력 2
2

출처

올림피아드 한국정보올림피아드 KOI 2023 1차 중등부 3번 고등부 2번
solution.cpp
에디터 불러오는 중...