Задача K. Лишнее ребро

Автор:Vasilii Parnikov   Ограничение времени:1 сек
Входной файл:Стандартный вход   Ограничение памяти:256 Мб
Выходной файл:Стандартный выход  

Условие

Дано полное k-арное дерево глубины h. k-арным называется корневое дерево где у каждой вершины не более k детей. Полным k-арным деревом глубины h называется k-арное дерево у которого все листы находятся на глубине h и у всех вершин k или 0 детей. Глубиной вершины в корневом дереве называется количество рёбер в простом пути от вершины до корня дерева.

Треугольником назовём неупорядоченную тройку различных вершин таких, что ровно одна вершина из тройки является предком двух остальных. Вершина u называется предком вершины v, если u лежит в простом пути от v до корня дерева.

Пусть edge  — некоторое ребро в дереве. Обозначим f(edge) =  количеству треугольников в двух деревьях которые получатся при удалении ребра edge в исходном дереве.

Авторы задачи ещё не решили, какое именно ребро является лишним. Пока они спорят, вычислите edge − ребро дерева f(edge), то есть сумму количества треугольников в двух деревьях по всем деревьям равным исходному с одним удалённым ребром.

Так как ответ может быть слишком большим, выведите его по модулю 998244353.

Формат входных данных

Единственная строка входных данных содержит два целых числа k и h.

Формат выходных данных

Выведите одно число  — ответ на задачу по модулю 998244353.

Ограничения

2 ≤ k < 998244353, 2 ≤ h ≤ 103

Примеры тестов

Стандартный вход Стандартный выход
1
2 2
54

Разбор

Найдем сперва количество треугольников в дереве без удаленных ребер. Назовем верхней вершиной трегольника ту, вершину которая является предком двух остальных вершин треугольника. Рассмотрим вершину u, и посчитаем для него количество треугольников в которых он является верхней вершиной. Так как он должен быть предком двух остальных вершин в треугольнике, количество таких треугольников равно C2s(u), где s(u)  — количество потомков вершины u минус 1, так как u является для самого себя потомком но в треугольнике все вершины различны. То есть s(u) равен размеру его поддерева минус 1. s(u) легко можно найти с помощью формулы суммы геометрической прогрессии. Понятно, что сумма C2s(u) по всем вершинам дерева это количество всех треугольников в дереве. Чтобы сделать это за O(h) можно заметить, что у вершин на одинаковой глубине одинаковое значение s(u), следовательно одинаковое значение C2s(u). Тогда можно перебрать все глубины от 0 до h и умножив C2s(u) на количество вершин на рассматриваемой глубине получим количество треугольников, чья верхняя вершина лежит на такой глубине.

Теперь посмотрим как изменится количество треугольников при удалении ребра. Обозначим v вершину на нижнем конце ребра. Некоторые треугольники исчезнут, так как из-за удаления ребра некоторые вершины перестанут быть предками вершин в поддереве v. Найдем количество треугольников которые исчезнут при удалении ребра. Очевидно, что исчезнут только деревья у которых верхняя вершина будет предком v. Поэтому пройдемся по всем предкам p вершины v, их не более O(h). Количество исчезнувших (при удалении ребра) треугольников с верхней вершиной p равно количеству треугольников с верхней вершиной p и двумя остальными вершинами в поддереве v плюс количество треугольников с верхней вершиной p, со второй вершиной в поддереве v и с третьей в поддереве p но не в поддереве v. Все значения чисел опять зависят только от глубины v. Поэтому вместо перебора всех v можно перебрать только глубины которые может иметь v. Тогда внешним циклом перебираем O(h) глубин, и внутренним циклом O(h) предков v. Итоговая сложность решения O(h2).


0.085s 0.012s 13