QOJ.ac

QOJ

Límite de tiempo: 4 s Límite de memoria: 512 MB Puntuación total: 25 Dificultad: [mostrar]

#18499. 樹的遍歷

Estadísticas

Yevin Kang 擁有一棵包含 $N$ 個頂點的樹,頂點標號為 $1$ 到 $N$。樹是一個不包含環的無向連通圖。

令 $K$ 為一個正整數。我們定義 $f(K)$ 如下:

對於任意兩個頂點 $1 \le u, v \le N$,令 $d(u, v)$ 表示連接頂點 $u$ 和頂點 $v$ 的簡單路徑上的邊數。特別地,對於所有 $1 \le u \le N$,有 $d(u, u) = 0$。

一個 $1, \dots, N$ 的排列 $p_1, \dots, p_N$ 若滿足以下所有條件,則稱為「好的」: 對於所有 $i = 2, \dots, N$,滿足 $d(p_{i-1}, p_i) \le K$。 對於所有滿足 $1 \le i < j \le N$ 的整數對 $(i, j)$,滿足 $d(1, p_i) \le d(1, p_j)$。

則 $f(K)$ 為好的排列的數量。

Yevin 認為這道題太簡單了,所以他給了你 $Q$ 個正整數 $K_1, \dots, K_Q$。他要求你輸出 $f(K_1), f(K_2), \dots, f(K_Q)$ 的值,並對 $10^9 + 7$ 取模。

注意,「mod」在大多數程式語言中對應於 % 運算子,表示除法後的餘數。例如,$5 \pmod 3 = 2$ 且 $17 \pmod 4 = 1$。

輸入格式

每個測試包含多個測試案例。

第一行包含一個整數 $T$ ($1 \le T \le 5 \times 10^5$),表示測試案例的數量。

每個測試案例的第一行包含兩個以空格分隔的整數 $N, Q$ ($1 \le Q \le N \le 5 \times 10^5$)。

接下來的 $N - 1$ 行,每行包含兩個以空格分隔的整數 $u, v$,表示樹中有一條連接 $u$ 和 $v$ 的邊。保證這 $N - 1$ 條邊構成一棵樹。

下一行包含 $Q$ 個整數 $K_1, \dots, K_Q$,表示 $Q$ 個查詢。

保證所有測試案例中 $N$ 的總和(記作 $\sum N$)不超過 $5 \times 10^5$。

下表顯示了 25 分的配分方式:

分數 $\sum N$ 的範圍 $Q$ 的範圍 $K_i$ 的範圍
2 分 $1 \le \sum N \le 10$ $1 \le Q \le N$ $1 \le K_i \le N$
3 分 $1 \le \sum N \le 5 \times 10^5$ $1 \le Q \le \min(2, N)$ $1 \le K_i \le \min(2, N)$
5 分 $1 \le \sum N \le 3000$ $1 \le Q \le \min(5, N)$ $1 \le K_i \le N$
7 分 $1 \le \sum N \le 5 \times 10^5$ $1 \le Q \le N$ $1 \le K_i \le N$
8 分 $1 \le \sum N \le 5 \times 10^5$ $1 \le Q \le N$ $1 \le K_i \le N$

輸出格式

對於每個測試案例,輸出一行包含 $Q$ 個以空格分隔的整數,即 $f(K_1), f(K_2), \dots, f(K_Q)$ 的值,並對 $10^9 + 7$ 取模。

範例

輸入 1

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

輸出 1

0 2 2
0 6 12

說明 1

範例輸入中的兩棵樹如下所示:

在第一個測試案例中,對於 $K = 2$ 或 $K = 3$,排列 $[1, 2, 3]$ 和 $[1, 3, 2]$ 都是好的排列。$[2, 1, 3]$ 對於所有 $K$ 值都不是好的排列,因為 $d(1, p_1) = 1 \not\le 0 = d(1, p_2)$ 違反了第二個條件。

可以證明對於 $K = 1$,不存在好的排列。

在第二個測試案例中,$[1, 3, 2, 4, 5, 6]$ 對於 $K = 3$ 是一個好的排列,但對於 $K = 2$ 則不是,因為 $d(2, 4) = 3 \not\le 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.