Logo
(追記) (追記ここまで)

31286번 - 철도 2 서브태스크언어 제한함수 구현

시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 1024 MB352706626.295%

문제

IOI 나라는 $N$개의 도시와 도시들을 잇는 $N - 1$개의 양방향 철도로 이루어져 있으며, 임의의 서로 다른 두 도시를 철도만을 사용하여 오갈 수 있다. 즉, IOI 나라의 철도망은 트리 구조를 이룬다. 도시에는 각각 0ドル$ 이상 $N - 1$ 이하의 서로 다른 번호가 붙어 있고, 철도에도 각각 0ドル$ 이상 $N - 2$ 이하의 서로 다른 번호가 붙어 있다. 모든 0ドル ≤ i ≤ N - 2$에 대하여 $i$번 철도는 $U[i]$번 도시와 $V[i]$번 도시를 양방향으로 연결하며, 철도의 길이는 $W[i]$이다.

IOI 나라의 어떤 도시에서 출발하더라도 다른 도시로 직통 열차를 타고 바로 이동할 수 있다. 즉, 0ドル ≤ u, v ≤ N - 1,ドル $u \ne v$인 모든 $N(N - 1)$개의 순서쌍 $(u, v)$에 대해, $u$번 도시에서 출발하여 $v$번 도시에 도착하는 직통 열차가 있다. $u$번 도시에서 이 직통 열차를 타면 $v$번 도시에 도착할 때까지 내릴 수 없으며, 이 직통 열차의 소요 시간은 IOI 나라의 철도망에서 $u$번 도시에서 시작하여 $v$번 도시에서 끝나는 유일한 단순 경로 상의 철도들의 길이를 합한 것과 같다.

철도 동호인인 당신은 오랫동안 한 기차를 타면서 여유로움을 느끼는 것을 즐기기 때문에, 소요 시간이 긴 직통 열차만을 타고 다닐수록 더 큰 즐거움을 느낀다.

구체적으로, 서로 다른 두 도시 $x,ドル $y$에 대해서, 즐거움 $\text{joy}(x, y)$ 는 다음 조건을 만족하는 최대의 양의 정수 $D$로 정의된다:

  • $x$번 도시에서 시작하여 소요 시간이 $D$ 이상인 직통 열차만을 타고 이동하는 것을 유한 번 반복하여, $y$번 도시에 도착할 수 있다.

0ドル ≤ x, y ≤ N - 1,ドル $x \ne y$를 만족하는 모든 $N(N - 1)$가지의 순서쌍 $(x, y)$에 대한 $\text{joy}(x, y)$의 합을 1ドル,円 000,円 000,円 007 (= 10^9 + 7)$로 나눈 나머지를 구하는 프로그램을 작성하라.

함수 목록 및 정의

여러분은 아래 함수를 구현해야 한다.

int travel(vector<int> U, vector<int> V, vector<int> W)
  • 이 함수는 단 한 번만 호출된다.
  • $U,ドル $V,ドル $W$: 크기가 $N - 1$인 정수 배열. 모든 $i$ (0ドル ≤ i ≤ N - 2$)에 대해, $U[i]$번 도시와 $V[i]$번 도시를 잇는 길이 $W[i]$의 철도가 있다.
  • 이 함수는 0ドル ≤ x, y ≤ N - 1,ドル $x \ne y$를 만족하는 모든 $N(N - 1)$가지의 순서쌍 $(x, y)$에 대한 $\text{joy}(x, y)$의 합을 1ドル,円 000,円 000,円 007 (= 10^9 + 7)$로 나눈 나머지를 반환해야 한다.

제출하는 소스 코드의 어느 부분에서도 입출력 함수를 실행해서는 안 된다.

입력

출력

제한

  • 2ドル ≤ N ≤ 500,円 000$
  • IOI 나라의 철도망은 트리 구조를 이룬다.
  • 모든 $i$에 대해 0ドル ≤ U[i], V[i] ≤ N - 1$; $U[i] \ne V[i]$ (0ドル ≤ i ≤ N - 2$)
  • 모든 $i$에 대해 1ドル ≤ W[i] ≤ 1,円 000,円 000,円 000$ (0ドル ≤ i ≤ N - 2$)

서브태스크

번호배점제한
13

$N ≤ 50$

26

$N ≤ 500$

319

$N ≤ 2,円 000$

45

$N ≤ 8,円 000$

모든 $i$에 대해 $U[i] = 0$ (0ドル ≤ i ≤ N - 2$)

57

$N ≤ 8,円 000$

모든 $i$에 대해 $U[i] = i$; $V[i] = i + 1$ (0ドル ≤ i ≤ N - 2$)

615

$N ≤ 8,円 000$

74

모든 $i$에 대해 $U[i] = 0$ (0ドル ≤ i ≤ N - 2$)

811

모든 $i$에 대해 $U[i] = i$; $V[i] = i + 1$ (0ドル ≤ i ≤ N - 2$)

930

추가적인 제약 조건이 없다.

힌트

예제 1

$N = 5,ドル $U = [0, 1, 0, 0],ドル $V = [1, 2, 3, 4],ドル $W = [1, 2, 3, 2]$인 경우를 생각해 보자.

그레이더는 다음 함수를 호출한다.

travel([0, 1, 0, 0], [1, 2, 3, 4], [1, 2, 3, 2])

아래 그림은 도시들과 철도망들의 배치를 나타낸다.

$x$번 도시와 $y$번 도시를 잇는 직통 열차의 소요 시간을 구해 보면 아래의 표와 같다.

모든 가능한 $(x, y)$ 순서쌍에 대해 $\text{joy}(x, y)$를 구해 보면 아래의 표와 같다.

  • $\text{joy}(0, 1) = 3$이다. 0ドル$번 도시에서 2ドル$번 도시로 직통 열차를 타고 이동하고, 2ドル$번 도시에서 4ドル$번 도시로 직통 열차를 타고 이동하고, 4ドル$번 도시에서 1ドル$번 도시로 직통 열차를 타고 이동하면 된다. 세 직통 열차의 소요 시간은 각각 3ドル,ドル 5ドル,ドル 4ドル$이다.
  • $\text{joy}(1, 2) = 4$이다. 1ドル$번 도시에서 3ドル$번 도시로 직통 열차를 타고 이동하고, 3ドル$번 도시에서 2ドル$번 도시로 직통 열차를 타고 이동하면 된다. 두 통 열차의 소요 시간은 각각 4ドル,ドル 6ドル$이다.
  • $\text{joy}(2, 3) = 6$이다. 2ドル$번 도시에서 3ドル$번 도시로 직통 열차를 타고 이동하면 된다. 이 직통 열차의 소요 시간은 6ドル$이다.

함수는 80ドル$을 반환해야 한다.

예제 2

$N = 5,ドル $U = [0, 0, 0, 0],ドル $V = [1, 2, 3, 4],ドル $W = [3, 2, 2, 1]$인 경우를 생각해 보자.

그레이더는 다음 함수를 호출한다.

travel([0, 0, 0, 0], [1, 2, 3, 4], [3, 2, 2, 1])

모든 가능한 $(x, y)$ 순서쌍에 대해 $\text{joy}(x, y)$를 구해 보면 아래의 표와 같다.

함수는 78ドル$을 반환하여야 한다.

예제 3

$N = 6,ドル $U = [0, 1, 2, 3, 4],ドル $V = [1, 2, 3, 4, 5],ドル $W = [3, 1, 4, 1, 5]$인 경우를 생각해 보자.

그레이더는 다음 함수를 호출한다.

travel([0, 1, 2, 3, 4], [1, 2, 3, 4, 5], [3, 1, 4, 1, 5])

모든 가능한 $(x, y)$ 순서쌍에 대해 $\text{joy}(x, y)$를 구해 보면 아래의 표와 같다.

함수는 284ドル$를 반환하여야 한다.

첨부

샘플 그레이더

Sample grader는 아래와 같은 형식으로 입력을 받는다.

  • Line 1ドル$: $N$
  • Line 2ドル + i$ (0ドル ≤ i ≤ N - 2$): $U[i]$ $V[i]$ $W[i]$

Sample grader는 다음을 출력한다.

  • Line 1ドル$: travel이 반환한 값

Sample grader는 실제 채점에서 사용하는 그레이더와 다를 수 있음에 유의하라.

출처

Olympiad > 국제정보올림피아드 대표학생 선발고사 > 2024 > 1차 선발고사 4번

제출할 수 있는 언어

C++17, C++20, C++17 (Clang), C++20 (Clang)

채점 및 기타 정보

  • 예제는 채점하지 않는다.
  • 이 문제의 채점 우선 순위는 2이다.
(追記) (追記ここまで)

출처

대학교 대회

  • 사업자 등록 번호: 541-88-00682
  • 대표자명: 최백준
  • 주소: 서울시 서초구 서초대로74길 29 서초파라곤 412호
  • 전화번호: 02-521-0487 (이메일로 연락 주세요)
  • 이메일: contacts@startlink.io
  • 통신판매신고번호: 제 2017-서울서초-2193 호

AltStyle によって変換されたページ (->オリジナル) /