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_7ece93e6ef00484d8119f0a11a3a2e94.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.