Блог пользователя PvPro

Автор PvPro, история, 3 месяца назад, По-английски

How do you usually build HLD?

Usually we calculate $$$sz_v$$$ — size of subtree of $$$v$$$. Then from $$$v$$$ we go to $$$u$$$ with largest $$$sz_u$$$ ($$$u$$$ is child of $$$v$$$). And this is still good way, but today I want to show you something different.

What if from $$$v$$$ we go to the random vertex $$$u$$$ in the whole subtree of $$$v$$$. It is the same as choosing to go to the $$$u$$$ ($$$u$$$ is child of $$$v$$$) with probability $$$\frac{sz_u}{sz_v - 1}$$$, so the probability of edge $$$v, u$$$ to be heavy is $$$\frac{sz_u}{sz_v - 1}$$$. Intuitively we should go the largest subtree.

Proof

Let's proof it works well. For vertex $$$v$$$ the expected value number of light edges on the way to root is $$$\sum_{i = 1}^{i \lt |u|}{1-\frac{sz_{u_i}}{sz_{u_{i + 1}} - 1}}$$$, where $$$u$$$ is vertexes on way from $$$v$$$ to root. Let $$$a_i$$$ be $$$sz_{u_i}$$$. Then $$$a$$$ is an increasing array and we know that $$$a_{h_v}$$$ equals to the size of the whole tree. $$$\sum_{i = 1}^{i \lt |a|}{1-\frac{a_i}{a_{i + 1} - 1}} \leq \sum_{i = 1}^{i \lt |a|}{\frac{a_{i + 1} - a_i}{a_{i + 1}}}$$$.

$$$\frac{a_{i+1} - a_i}{a_{i+1}} \le \int_{a_i}^{a_{i+1}} \frac{1}{x} \, dx = \ln(a_{i+1}) - \ln(a_i)$$$

$$$\sum_{i = 1}^{i \lt |a|}{1-\frac{a_i}{a_{i + 1} - 1}} \leq ln(a_{|a|})$$$.

So we have expected value number of light edges on the way is less than $$$ln(n)$$$.

Usages

remain to the reader

Полный текст и комментарии »

  • Проголосовать: нравится
  • +135
  • Проголосовать: не нравится

Автор PvPro, история, 12 месяцев назад, перевод, По-русски

Надеюсь, задания всем понравились, и спасибо за участие.

2110A - Модный массив

Разбор
Решение

2110B - Долой скобки

Разбор
Решение

2110C - Гонки

Разбор
Решение

2110D - Меньше батареек

Разбор
Решение

2110E - Мелодия

Разбор
Решение

2110F - Факультет

Разбор
Решение

Полный текст и комментарии »

Разбор задач Codeforces Round 1026 (Div. 2)
  • Проголосовать: нравится
  • +160
  • Проголосовать: не нравится

Автор PvPro, история, 12 месяцев назад, По-русски

Привет, Codeforces!

Мы рады пригласить Вас на Codeforces Round 1026 (Div. 2), который состоится May/24/2025 17:35 (Moscow time). Этот раунд будет рейтинговым для всех участников с рейтингом меньше 2100. У вас будет 2 часа для решения 6 задач. Задачи были подготовлены XaRDKoDblCH и PvPro.

Мы хотели бы поблагодарить всех, кто сделал этот раунд возможным:

Разбалловка: 500 — 750 — 1500 — 2000 — 2250 — 3000

Наш раунд будет посвящен cyberpunk-тематике, поэтому приготовьтесь спасать мир от роботов! ;)

Удачи!

UPD: Контест закончился, поздравляем победителей!

среди всех участников:

  1. maspy

  2. Geothermal

  3. 9ovem

  4. peti1234

  5. turmax

среди div.2 участников:

  1. 9ovem

  2. still_still_stellar

  3. Hellia

  4. Badint

  5. cuongaaaa

UPD: Разбор

Полный текст и комментарии »

  • Проголосовать: нравится
  • +419
  • Проголосовать: не нравится

Автор PvPro, история, 17 месяцев назад, По-русски

Привет codeforces!

Какой самый простой способ проверить есть ли в дереве совершенное паросочетание?

Может быть алгоритм Куна? :)

Скорее всго вы подумали про динамику по поддеревьям. Действительно это хороший способ, ведь он работает за размер ввода. Однако есть более простой способ проверить имеет ли дерево полное паросочетание.

Пусть $$$sz_v$$$ — размер поддерева $$$v$$$-й вершины. Тогда я утверждаю, что совершенное паросочетание есть тогда и только тогда, когда ровно половина всех $$$sz_v$$$ четная.

Доказательство:

Пусть $$$sz_{odd}$$$ — количество нечетных поддеревьев, а $$$sz_{even}$$$ — количетво четных поддеревьев.

Сначала докажем, что $$$sz_{even} \leq sz_{odd}$$$.

Заметим, что $$$sz_v = \sum_{u}^{} sz_u + 1$$$ ($$$u$$$ — ребенок $$$v$$$). Если $$$sz_v$$$ четно, то хотя-бы один из детей $$$u$$$ имеет нечетный размер поддерева, потому что их сумма нечетная. Сопоставим в пару каждому четному $$$sz_v$$$ нечетное $$$sz_u$$$ ($$$u$$$ — ребенок $$$v$$$). Таким образом $$$sz_{even} \leq sz_{odd}$$$. Более того, мы доказали, что если $$$sz_{even} = sz_{odd}$$$, то в дереве есть совершенное паросочетание, явно выбрав каждому четному $$$sz_v$$$ пару.

Теперь докажем, что если $$$sz_{even} \neq sz_{odd}$$$, то в дереве нет полного паросочетания. Допустим есть. Тогда в нем есть ребро, соединяющее $$$v, u$$$, такие что $$$sz_v \equiv sz_u \equiv 1\space (mod\space 2)$$$. Пусть $$$v$$$ — родитель $$$u$$$. Тогда заметим, что каждое ребро либо целиком содержится в поддереве $$$v$$$, либо нет. В обоих случаях ребро забирает из поддерева $$$v$$$ четное количество вершин, а значит и суммарно они заберут четное количество вершин, но $$$sz_v \equiv 1\space(mod\space 2)$$$ — противоречие.

Более того из-за неравенства $$$sz_{even} \leq sz_{odd}$$$ верно, что $$$sz_{odd} = sz_{even}$$$ равносильно наличию полного паросочетания в лесе.

Спасибо за прочтение!

Полный текст и комментарии »

  • Проголосовать: нравится
  • +185
  • Проголосовать: не нравится