Narfouz у центрі#12438

Narfouz у центрі (Розбір)

Вкоренимо дерево у вершині .

Визначимо наступні масиви ДП:

\text{downDepth}_x: максимальна глибина від до листа в його піддереві.

\text{downDiam}_x: діаметр (у кількості вершин) піддерева з коренем у .

Обчислюємо їх як:

\text{downDepth}_x = 1 + \max_{y \in \text{children}(x)} \text{downDepth}_y
\text{downDiam}_x = \max\left( \max_{y \in \text{children}(x)} \text{downDiam}_y,\; 1 + \text{два найбільші значення серед } \text{downDepth}_y \right)

Тепер визначимо висхідне ДП:

\text{upDepth}_x: максимальна глибина, починаючи від і виходячи за межі його піддерева.

\text{upDiam}_x: діаметр дерева після видалення піддерева .


Для обчислення \text{upDepth}_x (де p = \text{parent}(x)):

\text{upDepth}_x = 1 + \max\left( \text{upDepth}_p,\; \max_{y \in \text{children}(p),\, y \neq x} \text{downDepth}_y \right)

Для обчислення \text{upDiam}_x беремо максимум з:

\text{upDiam}_p
\max_{y \in \text{children}(p),\, y \neq x} \text{downDiam}_y
1 + \text{два найбільші значення серед } \left\{ \text{upDepth}_p \right\} \cup \left\{ \text{downDepth}_y : y \in \text{children}(p),\, y \neq x \right\}

Нарешті, для вершини , після її видалення кожна компонента відповідає:

Для кожної компоненти обчислюємо її діаметр і кількість центрів:

\text{centers}(d) = \begin{cases} 1 & \text{якщо } d \text{ непарне} \\ 2 & \text{якщо } d \text{ парне} \end{cases}

Таким чином,

\text{ans}_v = \sum_{\text{діти } u \text{ вершини } v} \text{centers}(\text{downDiam}_u) \;+\; \text{centers}(\text{upDiam}_v)

Часова складність: