QOJ.ac

QOJ

Time Limit: 1 s Memory Limit: 1024 MB Total points: 100 Difficulty: [show] Hackable ✓

#18988. 彩虹樹

Statistics

傳說喺夜之国入面,有一棵包含 $n$ 個節點嘅彩虹樹。彩虹樹係一棵有根樹,節點編號為 $0\sim n-1$,其中節點 $0$ 係彩虹樹嘅樹根,節點 $i$($1\le i<n$)嘅父節點係 $f_i$。

彩虹樹上嘅每個節點都可以顯現出任意顏色。顏色一共有無窮多種,但彩虹樹嘅繽紛度只由每棵子樹出現過嘅唔同顏色嘅數量決定,同具體係邊種顏色無關。具體噉講,設以節點 $i$($0\le i<n$)為根嘅子樹入面,一共有 $c_i$ 種唔同顏色嘅節點,咁彩虹樹嘅繽紛度就可以用序列 $[c_0,c_1,\ldots,c_{n-1}]$ 表示。例如,下圖入面,節點 $0,1,5$ 係藍色,節點 $2,4$ 係紅色,節點 $3$ 係黃色,所以彩虹樹嘅繽紛度係 $[3,2,1,2,1,1]$。

problem_18988_f57b31c5ef1e31149868065d3f630bbf.png

雲層嘅變化會令彩虹樹嘅色彩顯現出某種特定規律。具體噉講,每種規律都可以用一個相應嘅節點子集 $S\subseteq\{1,2,\ldots,n-1\}$ 嚟描述:集合 $S$ 入面嘅每個節點 $u$ 嘅顏色,都同某個祖先嘅顏色相同。形式化噉講,對於所有 $u\in S$,都存在 $u$ 嘅祖先 $p$($p\ne u$),滿足 $u$ 同 $p$ 嘅顏色相同。雖然受住以上規律限制,彩虹樹仍然可以呈現出唔同色彩,形成唔同繽紛度。記滿足規律 $S$ 嘅彩虹樹嘅繽紛度嘅種類數為 $w_S$,其中兩種繽紛度唔同,當且僅當兩個序列入面至少有一個元素唔同。

請計算,對於所有可能嘅 $2^{n-1}$ 種規律,滿足每種規律嘅彩虹樹嘅繽紛度嘅種類數嘅總和,即 $\sum_{S\subseteq\{1,2,\ldots,n-1\}}w_S$。由於答案可能較大,只需要求出答案對 $998\,244\,353$ 取模之後嘅結果。

實作細節

選手唔需要,亦唔應該實作 main 函數。

選手需要確保提交嘅程式原始檔包含標頭檔 rainbow.h,即喺程式開頭加入以下程式碼:

#include "rainbow.h"

選手需要喺提交嘅程式原始檔 rainbow.cpp 入面實作以下函數:

int rainbow(int c, int n, std::vector<int> f);
  • $c,n$ 分別表示測試點編號同彩虹樹嘅節點數。$c=0$ 表示呢個測試點係樣例。
  • $f$ 係一個長度為 $n$ 嘅序列,其中 $f_0=0$,$f_i$($1\le i<n$)表示節點 $i$ 嘅父節點。
  • 呢個函數需要回傳滿足每種規律嘅彩虹樹嘅繽紛度嘅種類數嘅總和對 $998\,244\,353$ 取模之後嘅結果。
  • 對於每個測試點,呢個函數會被評測程式呼叫恰好一次。

本試題目錄下嘅 template_rainbow.cpp 係提供嘅範例程式碼,選手可以參考佢嚟實作自己嘅程式碼。

測試程式嘅方法

選手可以喺本題目錄下用以下命令編譯得到可執行檔:

g++ grader.cpp rainbow.cpp -o rainbow -O2 -std=c++14 -static

對於編譯得到嘅可執行檔 rainbow:

  • 可執行檔會由標準輸入讀入以下格式嘅數據:

    • 第一行包含兩個非負整數 $c,n$。
    • 第二行包含 $n-1$ 個非負整數 $f_1,f_2,\ldots,f_{n-1}$。
  • 可執行檔會將以下格式嘅數據輸出到標準輸出:

    • 輸出一行一個非負整數,表示 rainbow 函數嘅回傳值。

樣例

輸入 1

0 3
0 0

輸出 1

8

解釋

  • 滿足規律 $S=\varnothing$ 嘅彩虹樹嘅繽紛度一共有 $[1,1,1],[2,1,1],[3,1,1]$ 三種;
  • 滿足規律 $S=\{1\}$ 嘅彩虹樹嘅繽紛度一共有 $[1,1,1],[2,1,1]$ 兩種;
  • 滿足規律 $S=\{2\}$ 嘅彩虹樹嘅繽紛度一共有 $[1,1,1],[2,1,1]$ 兩種;
  • 滿足規律 $S=\{1,2\}$ 嘅彩虹樹嘅繽紛度有 $[1,1,1]$ 一種。

所以答案係 $3+2+2+1=8$。

輸入 2

0 6
0 1 0 3 1

輸出 2

279

樣例 3

見選手目錄下嘅 rainbow/rainbow3.in 同 rainbow/rainbow3.ans。

呢個樣例滿足測試點 $3,4$ 嘅限制條件。

樣例 4

見選手目錄下嘅 rainbow/rainbow4.in 同 rainbow/rainbow4.ans。

呢個樣例滿足測試點 $5\sim7$ 嘅限制條件。

樣例 5

見選手目錄下嘅 rainbow/rainbow5.in 同 rainbow/rainbow5.ans。

呢個樣例滿足測試點 $8,9$ 嘅限制條件。

樣例 6

見選手目錄下嘅 rainbow/rainbow6.in 同 rainbow/rainbow6.ans。

呢個樣例滿足測試點 $10\sim12$ 嘅限制條件。

數據範圍

對於所有測試數據,都有:

  • $1\le n\le200$;
  • 對於所有 $1\le i<n$,都有 $0\le f_i<i$。
測試點編號 $n\le$ 特殊性質
$1$ $4$ 無
$2$ $8$ 無
$3,4$ $16$ 無
$5\sim7$ $50$ 無
$8,9$ $10^2$ B
$10\sim12$ $10^2$ 無
$13\sim15$ $150$ 無
$16$ $200$ A
$17\sim19$ $200$ B
$20\sim25$ $200$ 無

特殊性質 A:對於所有 $1\le i<n$,都有 $f_i=i-1$。

特殊性質 B:對於所有 $0\le i<n$,至多存在兩個 $j$ 滿足 $f_j=i$。

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
EditorialOpen Official EditorialQingyu- Download
#2220EditorialOpenqwqGotoHiotoriView
#2609EditorialOpen$O(n^2 \log^2 n)$ 题解 by ChatGPTAnonymousView

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.