QOJ.ac

QOJ

Time Limit: 10 s Memory Limit: 512 MB Total points: 100 Difficulty: [show] Hackable ✓

#1222. Poligon

Statistics

久莲 adalah seorang gadis yang suka membuat soal.

Setelah World Final tahun ini berakhir, 久莲 sangat menyukai geometri komputasional. Karena itu, ia berniat memberikan soal geometri komputasional juga di NOI: soal yang hanya namanya berkaitan dengan geometri komputasional.

Pertama, 久莲 memberikan pohon berakar $T$ dengan $n$ simpul ($n\ge 2$), dengan akar bernomor $1$. Simpul daun didefinisikan sebagai semua simpul selain akar yang memiliki derajat tepat $1$. Gambar berikut adalah contoh pohon $T$, dengan himpunan simpul daun $\{3,4,5\}$.

problem_1222_d98001ee924aa207c74550aa9a5aac23.png

Kemudian, dari pohon ini, 久莲 membangun barisan $A$:

  • Lakukan penelusuran mendalam pada seluruh pohon mulai dari akar, dengan mengunjungi anak-anak menurut urutan nomor dari kecil ke besar. Dengan demikian, diperoleh urutan DFS pohon $T$.
  • Selanjutnya, 久莲 menyusun semua simpul daun berurutan menurut kemunculannya dalam urutan DFS dari awal ke akhir, sehingga diperoleh barisan $A$.

Lebih lanjut, melalui barisan $A$, 久莲 mendefinisikan jarak $d(u,v)$ antara dua simpul daun $u,v$: misalkan $u$ merupakan elemen ke-$i$ dalam $A$ dan $v$ merupakan elemen ke-$j$, maka $d(u,v)=\min(|i-j|,|A|-|i-j|)$. Di sini, $|A|$ adalah panjang barisan, yaitu jumlah daun $T$, sedangkan $i,j$ adalah posisi kemunculan yang dihitung mulai dari $1$.

Dalam contoh di atas, barisan $A$ adalah $[4,5,3]$, dengan $d(3,5)=d(3,4)=d(4,5)=1$. Posisi kemunculan $3,4,5$ masing-masing adalah $3,1,2$.

Terakhir, 久莲 memberikan parameter $K$. Dari pohon berakar $T$ dan barisan $A$, kita dapat membangun graf tak berarah $G$ dengan $n$ simpul, tanpa sisi ganda dan tanpa gelang: terdapat sisi antara dua simpul berbeda $u,v$ jika dan hanya jika setidaknya salah satu syarat berikut terpenuhi:

  • Terdapat sisi yang menghubungkan $u,v$ pada pohon $T$.
  • Pada pohon $T$, $u,v$ keduanya simpul daun dan $d(u,v)\le K$.

Ketika $K=1$ atau $2$, graf $G$ yang dihasilkan dari contoh di atas sama-sama seperti pada gambar berikut:

Sekarang 久莲 ingin Anda menghitung banyaknya siklus Hamilton yang berbeda pada $G$. Jawabannya mungkin sangat besar, jadi keluarkan hasilnya modulo $998244353$.

problem_1222_7759a909031bfff90677b1b27aea0d9e.png

Berikut adalah beberapa definisi tambahan:

  • Siklus Hamilton $H$ pada graf tak berarah $G$ tanpa sisi ganda dan tanpa gelang adalah suatu himpunan bagian sisi-sisi $G$, dengan setiap simpul memiliki tepat dua sisi insiden berbeda di dalam $H$, dan setiap dua simpul dapat saling mencapai secara langsung atau tidak langsung melalui sisi-sisi $H$.
  • Dua siklus Hamilton $H_1,H_2$ pada graf tak berarah $G$ tanpa sisi ganda dan tanpa gelang berbeda jika dan hanya jika terdapat sisi $e$ yang berada dalam $H_1$ dan $e$ tidak berada dalam $H_2$.

Masukan

Baca data dari berkas polygon.in.

Baris pertama berisi dua bilangan bulat $n,K$, yang menyatakan jumlah simpul pohon $T$ dan parameter $K$ yang dipilih 久莲.

Baris kedua berisi $n-1$ bilangan bulat $f_i$ ($1\le f_i\le i$), dengan $f_i$ menyatakan bahwa terdapat sisi $(f_i,i+1)$ pada pohon $T$.

Keluaran

Tulis keluaran ke berkas polygon.out.

Keluarkan satu baris berisi satu bilangan bulat, yaitu banyaknya siklus Hamilton modulo $998244353$.

Contoh

Masukan 1

5 1
1 1 2 2

Keluaran 1

2

Penjelasan

Contoh ini sama persis dengan contoh pada deskripsi soal. Urutan simpul yang dilalui kedua siklus Hamilton masing-masing adalah $(1,2,4,5,3)$ dan $(1,2,5,4,3)$.

Subsoal

Ukuran dan sifat data setiap kasus penilaian ditunjukkan pada tabel berikut:

Nomor $n$ $K$ Sifat khusus Nomor $n$ $K$ Sifat khusus
$1$ $\le 5$ $\le 3$ Tidak ada $11$ $\le 1000$ $\le 2$ A
$2$ $\le 10$ $12$
$3$ $\le 15$ $13$
$4$ $\le 20$ $14$ Tidak ada
$5$ $\le 1000$ $=1$ A $15$
$6$ $16$
$7$ $17$ $\le 3$ A
$8$ Tidak ada $18$
$9$ $19$ Tidak ada
$10$ $20$

Sifat A menjamin bahwa setiap simpul pada pohon memiliki paling banyak dua anak.

Untuk semua data, dijamin $1\le f_i\le i,2\le n\le 1000$.

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.