QOJ.ac

QOJ

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

#18988. Pohon Pelangi

Statistics

Konon, di negeri 夜之国 terdapat pohon pelangi dengan $n$ simpul. Pohon pelangi adalah pohon berakar dengan simpul bernomor $0\sim n-1$, berakar pada simpul $0$, dan induk simpul $i$ ($1\le i<n$) adalah $f_i$.

Setiap simpul pohon pelangi dapat menampilkan warna apa pun. Ada tak hingga banyak warna, tetapi keragaman warna pohon pelangi hanya ditentukan oleh jumlah warna berbeda yang muncul dalam setiap subpohon, tanpa bergantung pada warna yang sebenarnya. Secara rinci, misalkan subpohon berakar pada simpul $i$ ($0\le i<n$) memiliki simpul-simpul dengan $c_i$ warna berbeda. Keragaman warna pohon pelangi dinyatakan dengan barisan $[c_0,c_1,\ldots,c_{n-1}]$. Misalnya, pada gambar berikut simpul $0,1,5$ berwarna biru, simpul $2,4$ merah, dan simpul $3$ kuning, sehingga keragaman warnanya adalah $[3,2,1,2,1,1]$.

problem_18988_c8eeb881663e04cc6aa580b7c5117476.png

Perubahan awan menyebabkan warna pohon pelangi mengikuti suatu pola tertentu. Setiap pola dapat dideskripsikan oleh suatu himpunan bagian simpul $S\subseteq\{1,2,\ldots,n-1\}$: warna setiap simpul $u$ dalam $S$ sama dengan warna salah satu leluhurnya. Secara formal, untuk setiap $u\in S$, terdapat leluhur $p$ dari $u$ ($p\ne u$) dengan warna $u$ sama dengan warna $p$. Meskipun dibatasi pola tersebut, pohon pelangi masih dapat menampilkan berbagai pewarnaan yang menghasilkan keragaman warna berbeda. Nyatakan dengan $w_S$ banyaknya jenis keragaman warna pohon pelangi yang memenuhi pola $S$. Dua keragaman warna berbeda jika dan hanya jika setidaknya satu elemen kedua barisannya berbeda.

Hitung jumlah banyaknya jenis keragaman warna yang memenuhi setiap pola, untuk semua $2^{n-1}$ pola yang mungkin, yaitu $\sum_{S\subseteq\{1,2,\ldots,n-1\}}w_S$. Karena jawabannya mungkin sangat besar, cukup keluarkan hasilnya modulo $998,244,353$.

Detail Implementasi

Peserta tidak perlu dan tidak boleh mengimplementasikan fungsi main.

Pastikan berkas sumber program yang dikumpulkan menyertakan header rainbow.h, yaitu tambahkan kode berikut pada awal program:

#include "rainbow.h"

Peserta harus mengimplementasikan fungsi berikut dalam berkas sumber rainbow.cpp yang dikumpulkan:

int rainbow(int c, int n, std::vector<int> f);
  • $c,n$ masing-masing menyatakan nomor kasus penilaian dan jumlah simpul pohon pelangi. $c=0$ menyatakan bahwa kasus penilaian tersebut adalah contoh.
  • $f$ adalah barisan sepanjang $n$, dengan $f_0=0$ dan $f_i$ ($1\le i<n$) menyatakan induk simpul $i$.
  • Fungsi ini harus mengembalikan jumlah banyaknya jenis keragaman warna pohon pelangi yang memenuhi setiap pola, modulo $998,244,353$.
  • Untuk setiap kasus penilaian, fungsi ini dipanggil tepat sekali oleh program penilai.

Berkas template_rainbow.cpp dalam direktori soal adalah kode contoh yang disediakan; peserta dapat merujuknya untuk mengimplementasikan kode sendiri.

Cara Menguji Program

Peserta dapat menggunakan perintah berikut dalam direktori soal untuk mengompilasi program menjadi berkas yang dapat dieksekusi:

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

Untuk program hasil kompilasi rainbow:

  • Program membaca data dari masukan standar dengan format berikut:

    • Baris pertama berisi dua bilangan bulat nonnegatif $c,n$.
    • Baris kedua berisi $n-1$ bilangan bulat nonnegatif $f_1,f_2,\ldots,f_{n-1}$.
  • Program menulis data ke keluaran standar dengan format berikut:

    • Satu baris berisi satu bilangan bulat nonnegatif yang menyatakan nilai kembalian fungsi rainbow.

Contoh

Masukan 1

0 3
0 0

Keluaran 1

8

Penjelasan Contoh 1

  • Terdapat tiga keragaman warna pohon pelangi yang memenuhi pola $S=\varnothing$: $[1,1,1]$, $[2,1,1]$, dan $[3,1,1]$;
  • Terdapat dua keragaman warna yang memenuhi pola $S=\{1\}$: $[1,1,1]$ dan $[2,1,1]$;
  • Terdapat dua keragaman warna yang memenuhi pola $S=\{2\}$: $[1,1,1]$ dan $[2,1,1]$;
  • Terdapat satu keragaman warna yang memenuhi pola $S=\{1,2\}$: $[1,1,1]$.

Jadi, jawabannya adalah $3+2+2+1=8$.

Masukan 2

0 6
0 1 0 3 1

Keluaran 2

279

Contoh 3

Lihat rainbow/rainbow3.in dan rainbow/rainbow3.ans di direktori peserta.

Contoh ini memenuhi batasan kasus penilaian $3,4$.

Contoh 4

Lihat rainbow/rainbow4.in dan rainbow/rainbow4.ans di direktori peserta.

Contoh ini memenuhi batasan kasus penilaian $5\sim7$.

Contoh 5

Lihat rainbow/rainbow5.in dan rainbow/rainbow5.ans di direktori peserta.

Contoh ini memenuhi batasan kasus penilaian $8,9$.

Contoh 6

Lihat rainbow/rainbow6.in dan rainbow/rainbow6.ans di direktori peserta.

Contoh ini memenuhi batasan kasus penilaian $10\sim12$.

Batasan

Untuk semua kasus uji, berlaku:

  • $1\le n\le 200$;
  • Untuk setiap $1\le i<n$, berlaku $0\le f_i<i$.
Nomor kasus penilaian $n\le$ Sifat khusus
$1$ $4$ Tidak ada
$2$ $8$
$3,4$ $16$
$5\sim7$ $50$
$8,9$ $10^2$ B
$10\sim12$ Tidak ada
$13\sim15$ $150$
$16$ $200$ A
$17\sim19$ B
$20\sim25$ Tidak ada

Sifat khusus A: untuk setiap $1\le i<n$, berlaku $f_i=i-1$.

Sifat khusus B: untuk setiap $0\le i<n$, terdapat paling banyak dua $j$ yang memenuhi $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.