트리 짝짓기

월간 향유회 2026. 01-02. Open Contest G번 BOJ 35312번
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 1024 MB60282549.020%

문제

정점이 $2N$개인 트리가 주어진다. 모그는 이 트리의 모든 정점을 두 개씩 짝지어 총 $N$개의 쌍으로 분할하려 한다. 분할의 비용은 $N$개의 쌍 전체에 대해 각 쌍에 속하는 두 정점 사이의 거리의 합이다. 두 정점 사이의 거리는 트리에서 두 정점을 잇는 유일한 경로에 포함된 간선 가중치의 합이다. 이때, 비용을 최소로 하여 분할하는 경우의 수를 구해보자. 두 분할이 서로 다르다고 함은, 적어도 한 정점이 서로 다른 정점과 짝지어지는 경우를 말하며, 쌍들의 나열 순서는 고려하지 않는다.

입력

첫째 줄에 테스트 케이스의 개수 $T$가 주어진다. $(1\le T\le 10\, 000)$

각 테스트 케이스의 첫째 줄에 양의 정수 $N$이 주어진다. $(1\le N\le 100\, 000)$

각 테스트 케이스의 둘째 줄부터 $2N-1$개의 줄에 걸쳐 $u_i, v_i, c_i$가 공백으로 구분되어 주어진다. 이는 정점 $u_i$와 $v_i$ 사이에 가중치가 $c_i$인 간선이 존재함을 뜻한다. $(1\le u_i < v_i\le 2N$; $1\le c_i\le 10^9)$

주어진 그래프는 항상 트리 구조임이 보장된다.

모든 테스트 케이스에서 $N$의 합은 $100\, 000$을 넘지 않는다.

출력

각 테스트 케이스마다 분할하는 경우의 수를 $998\, 244\, 353$으로 나눈 나머지를 한 줄에 하나씩 출력한다.

예제 입력 1

2
2
1 2 1
1 3 2
1 4 1
1
1 2 7

예제 출력 1

3
1

첫 번째 테스트 케이스에서 $\{(1, 2),(3,4)\}, \{(1,3),(2,4)\}, \{(1,4),(2,3)\}$로 나눴을 때, 각 쌍의 비용 합이 $4$로 최소이다. 따라서 $3$가지가 가능하다.

출처

Contest > BOJ User Contest > 월간 향유회 > 월간 향유회 2026. 01-02. G번

  • 문제를 만든 사람: lunarlity
  • 문제를 검수한 사람: martin0327, utilforever