QOJ.ac

QOJ

Time Limit: 1.0 s Memory Limit: 256 MB Total points: 100 Hackable ✓

#17749. 푸드 파이트

Statistics

Busy Beaver가 다시 한번 농산물 시장에 혼란을 일으키고 있습니다! 이번에는 가판대 사이에서 음식 싸움을 시작했습니다.

가판대는 $1$부터 $N$까지 번호가 매겨져 있으며, $N-1$개의 도로로 연결되어 트리를 이룹니다. 즉, 도로를 따라 임의의 가판대에서 다른 가판대로 이동할 수 있으며, 임의의 두 가판대 사이에는 정확히 하나의 단순 경로가 존재합니다.

Busy Beaver는 다음과 같이 각 가판대를 Team Potato 또는 Team Tomato에 할당합니다:

  • 그는 가판대 $1$에서 시작하여 도로를 따라 이동하며 모든 가판대를 방문하고, 마지막에 가판대 $1$로 돌아옵니다. 이러한 모든 경로 중에서, 그는 이동한 총 도로 수가 최소가 되는 경로를 하나 선택합니다.
  • 가판대 $1$은 Team Potato에 할당됩니다.
  • Busy Beaver가 (가판대 $1$을 제외하고) 처음으로 가판대를 방문할 때마다, 그는 즉시 해당 가판대를 두 팀 중 하나에 할당합니다. 공정한 싸움을 위해, 그는 새로운 가판대를 할당할 때마다 팀 할당을 번갈아 가며 수행합니다. 즉, 가장 최근에 할당된 가판대가 Team Potato에 할당되었다면, 다음에 새로 방문하는 가판대는 반드시 Team Tomato에 할당되어야 하며, 그 반대도 마찬가지입니다.

여러분의 임무는 가능한 팀 할당의 수를 세는 것입니다. 서로 다른 최소 길이 경로가 동일한 최종 할당을 생성할 수 있으며, 이러한 할당은 한 번만 계산해야 한다는 점에 유의하십시오. 답이 매우 클 수 있으므로 $10^9 + 7$로 나눈 나머지를 출력하십시오.

입력

첫 번째 줄에는 테스트 케이스의 수 $T$ ($1 \le T \le 10^4$)가 주어집니다.

각 테스트 케이스의 첫 번째 줄에는 정수 $N$ ($2 \le N \le 10^5$)이 주어집니다.

다음 $N-1$개의 줄에는 각각 두 정수 $u$와 $v$ ($1 \le u, v \le N, u \neq v$)가 주어지며, 이는 가판대 $u$와 $v$ 사이에 도로가 있음을 나타냅니다.

모든 테스트 케이스에 대한 $N$의 합은 $2 \cdot 10^5$를 넘지 않습니다.

출력

각 테스트 케이스마다 가능한 최종 팀 할당의 수를 $10^9 + 7$로 나눈 나머지를 출력하십시오.

서브태스크

이 문제에는 두 가지 서브태스크가 있습니다.

  • (10점): 가판대들이 가판대 $1$을 루트로 하는 스타 그래프를 이룹니다. 더 구체적으로, 가판대 $1$에는 $N-1$개의 도로가 연결되어 있습니다.
  • (20점): 가판대들이 가판대 $1$을 루트로 하는 이진 트리를 이룹니다. 더 구체적으로, 가판대 $1$에는 최대 2개의 도로가 연결되어 있고, 다른 모든 가판대에는 최대 3개의 도로가 연결되어 있습니다.
  • (70점): 추가 제약 조건이 없습니다.

예제

입력 1

4
4
1 2
2 3
2 4
7
1 2
1 3
1 4
1 5
1 6
1 7
7
1 2
1 3
2 4
2 5
3 6
3 7
7
1 2
1 3
1 4
2 5
2 6
2 7

출력 1

2
20
8
12

참고

예제에는 4개의 테스트 케이스가 포함되어 있습니다:

  • 테스트 케이스 1은 두 번째 서브태스크(이진 트리)를 만족합니다.
  • 테스트 케이스 2는 첫 번째 서브태스크(스타 그래프)를 만족합니다.
  • 테스트 케이스 3은 두 번째 서브태스크(이진 트리)를 만족합니다.
  • 테스트 케이스 4는 세 번째 서브태스크(추가 제약 조건 없음)를 만족합니다.

첫 번째 테스트 케이스에서 가능한 팀 할당 중 하나는 아래와 같습니다.

최소 길이 경로 중 하나는 다음과 같습니다: $1 \to 2 \to 3 \to 2 \to 4 \to 2 \to 1$.

이 경로의 총 길이는 6이며, 이는 가판대 $1$에서 시작하여 모든 가판대를 방문하고 가판대 $1$로 돌아오는 경로 중 가장 짧은 것입니다.

가판대는 처음 방문한 순서대로 할당됩니다:

  • 가판대 $1$은 Team Potato에 할당됩니다.
  • 가판대 $2$는 Team Tomato에 할당됩니다.
  • 가판대 $3$은 Team Potato에 할당됩니다.
  • 가판대 $4$는 Team Tomato에 할당됩니다.

다른 가능한 팀 할당은 가판대 $3$보다 가판대 $4$를 먼저 방문함으로써 얻어지며, 이는 팀을 서로 바꿉니다. 따라서 가능한 총 팀 할당 수는 2입니다.

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.