QOJ.ac

QOJ

시간 제한: 10 s 메모리 제한: 512 MB 총점: 100 난이도: [표시] 해킹 가능 ✓

#1222. 多邊形

통계

久莲是一個喜歡出題的女孩子。

在今年的 World Final 結束以後,久莲特別喜歡計算幾何,於是她打算在 NOI 的考場上也出一個計算幾何:這是一道只有題目名字和計算幾何相關的題目。

首先,久莲給出了一棵 $n$($n\ge2$)個節點的有根樹 $T$,根節點編號為 $1$。定義葉節點為除了根以外所有度數恰好為 $1$ 的節點。下圖是一個樹 $T$ 的例子,其中葉節點集合為 $\{3,4,5\}$。

problem_1222_a50638920b7d54994cdb30860ea9bded.png

接著透過這棵樹,久莲構造了一個序列 $A$:

  • 從根節點開始深度優先走訪整棵樹,走訪時按照編號從小到大的順序來存取子節點,這樣可以得到一個樹 $T$ 的 DFS 序。
  • 接著按照在 DFS 序中的出現順序從前往後,久莲把所有葉節點排成一排得到了一個序列 $A$。

更進一步地,透過序列 $A$,久莲定義了兩個葉節點 $u,v$ 的距離 $d(u,v)$:假設 $u$ 在 $A$ 中是第 $i$ 個元素,$v$ 是第 $j$ 個元素,則 $d(u,v)=\min(|i-j|,|A|-|i-j|)$。其中 $|A|$ 為序列的長度,即 $T$ 的葉子個數,$i,j$ 指的是出現的位置,從 $1$ 開始計數。

上面的例子中,序列 $A$ 為 $[4,5,3]$,其中 $d(3,5)=d(3,4)=d(4,5)=1$,$3,4,5$ 的出現位置分別為 $3,1,2$。

最後,久莲給出了一個參數 $K$,利用這棵有根樹 $T$ 和序列 $A$,我們可以構造一張 $n$ 個點的無重邊無自環的無向圖 $G$:兩個不同的點 $u,v$ 之間有邊當且僅當它們滿足下列條件中的至少一個:

  • 在樹 $T$ 中存在連接 $u,v$ 的邊。
  • 在樹 $T$ 中 $u,v$ 都是葉節點且 $d(u,v)\le K$。

當 $K=1$ 或 $2$ 時,上面的例子得到的圖 $G$ 都如下圖所示:

現在久莲想讓你來計算一下 $G$ 中不同的哈密頓迴路數量有多少條,答案可能很大,請對 $998244353$ 取模後輸出。

problem_1222_ca7283448ea3d7dfbee7b3cfcc363126.png

下面是一些補充定義:

  • 無重邊無自環的無向圖 $G$ 的一條哈密頓迴路 $H$ 是 $G$ 中邊的一個子集,其中每一個點恰好有兩條不同的相鄰邊在 $H$ 中,且任意兩個點都可以透過 $H$ 中的邊直接或間接到達。
  • 無重邊無自環的無向圖 $G$ 的兩條哈密頓迴路 $H_1,H_2$ 是不同的當且僅當存在一條邊 $e$ 使得 $e$ 在 $H_1$ 中且不在 $H_2$ 中。

輸入格式

從檔案 polygon.in 中讀入資料。

第一行輸入兩個整數 $n,K$,表示樹 $T$ 的點數以及久莲選定的參數 $K$。

第二行輸入 $n-1$ 個整數 $f_i$($1\le f_i\le i$),其中 $f_i$ 表示樹 $T$ 上存在邊 $(f_i,i+1)$。

輸出格式

輸出到檔案 polygon.out 中。

輸出一行一個整數,表示哈密頓迴路數量對 $998244353$ 取模後的結果。

範例

輸入格式 1

5 1
1 1 2 2

輸出格式 1

2

說明

該範例和題面中的例子完全相同。兩條哈密頓迴路經過節點的順序分別為 $(1,2,4,5,3)$ 和 $(1,2,5,4,3)$。

子任務

各測試點的資料規模和性質如下表:

編號 $n$ $K$ 特殊性質 編號 $n$ $K$ 特殊性質
$1$ $\le5$ $\le3$ 無 $11$ $\le1000$ $\le2$ A
$2$ $\le10$ $12$
$3$ $\le15$ $13$
$4$ $\le20$ $14$ 無
$5$ $\le1000$ $=1$ A $15$
$6$ $16$
$7$ $17$ $\le3$ A
$8$ 無 $18$
$9$ $19$ 無
$10$ $20$

其中性質 A 為保證樹上所有節點至多有兩個子節點。

對於所有的資料,保證 $1\le f_i\le i$,$2\le n\le1000$。

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.