QOJ.ac

QOJ

时间限制: 10 s 内存限制: 512 MB 总分: 100 难度: [显示] 可 Hack ✓

#1222. Многоугольник

统计

久莲 — девочка, которой нравится придумывать задачи.

После финала World Final в этом году 久莲 особенно полюбила вычислительную геометрию и решила предложить такую задачу на NOI. Но с вычислительной геометрией в этой задаче связано только название.

Сначала 久莲 задаёт корневое дерево $T$ с $n$ вершинами ($n\geq 2$), корень которого имеет номер $1$. Листьями назовём все вершины, кроме корня, степень которых равна ровно $1$. На рисунке ниже приведён пример дерева $T$ с множеством листьев $\{3,4,5\}$.

problem_1222_77439e2c38043202d3ff9101bf49ed3d.png

Затем 久莲 строит по этому дереву последовательность $A$:

  • Выполняет обход всего дерева в глубину, начиная с корня и посещая детей в порядке возрастания их номеров. Так получается порядок DFS дерева $T$.
  • Выписывает все листья в последовательность $A$ в порядке их появления в порядке DFS.

Далее по последовательности $A$ 久莲 определяет расстояние $d(u,v)$ между двумя листьями $u,v$. Если $u$ — элемент $i$ последовательности $A$, а $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$, построим неориентированный граф без кратных рёбер и петель $G$ с $n$ вершинами. Две различные вершины $u,v$ соединены ребром тогда и только тогда, когда выполняется хотя бы одно из условий:

  • В дереве $T$ есть ребро между $u$ и $v$.
  • Вершины $u,v$ — листья дерева $T$, и $d(u,v)\leq K$.

При $K=1$ или $K=2$ для приведённого примера получается граф $G$, показанный ниже.

Теперь 久莲 просит вас вычислить количество различных гамильтоновых циклов в $G$. Ответ может быть большим; выведите его по модулю $998\,244\,353$.

problem_1222_d52f42f7e4925189104bab2764d86f77.png

Несколько дополнительных определений:

  • Гамильтонов цикл $H$ неориентированного графа $G$ без кратных рёбер и петель — подмножество его рёбер, в котором каждой вершине инцидентны ровно два различных ребра из $H$ и любые две вершины достижимы друг из друга непосредственно или через другие вершины по рёбрам $H$.
  • Два гамильтоновых цикла $H_1,H_2$ такого графа различны тогда и только тогда, когда существует ребро $e$, которое принадлежит $H_1$, но не принадлежит $H_2$.

Входные данные

Данные читаются из файла polygon.in.

Первая строка содержит два целых числа $n,K$ — количество вершин дерева $T$ и выбранный 久莲 параметр $K$.

Вторая строка содержит $n-1$ целых чисел $f_i$ ($1\leq f_i\leq i$), означающих, что в дереве $T$ есть ребро $(f_i,i+1)$.

Выходные данные

Выведите ответ в файл polygon.out.

Выведите одну строку с одним целым числом — количеством гамильтоновых циклов по модулю $998\,244\,353$.

Примеры

Входные данные 1

5 1
1 1 2 2

Выходные данные 1

2

Примечание

Этот пример в точности совпадает с примером из условия. Два гамильтоновых цикла проходят вершины в порядке $(1,2,4,5,3)$ и $(1,2,5,4,3)$ соответственно.

Подзадачи

Размеры и свойства данных для тестов приведены в следующей таблице:

Номер $n$ $K$ Особое свойство Номер $n$ $K$ Особое свойство
$1$ $\leq 5$ $\leq 3$ Нет $11$ $\leq 1000$ $\leq 2$ A
$2$ $\leq 10$ $12$
$3$ $\leq 15$ $13$
$4$ $\leq 20$ $14$ Нет
$5$ $\leq 1000$ $=1$ A $15$
$6$ $16$
$7$ $17$ $\leq 3$ A
$8$ Нет $18$
$9$ $19$ Нет
$10$ $20$

Свойство A: гарантируется, что каждая вершина дерева имеет не более двух детей.

Для всех данных гарантируется $1\leq f_i\leq i$, $2\leq n\leq 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.