Всем привет, у клавиатуры Кодер Арсений. Проходя одно из соревнований, мне попалась задача, в ходе решения которой я узнал о DSU. Эта вещь очень сильно помогает при решении задач, поэтому я решил изучить её поподробнее. Теория DSU - это структура данных, которая позволяет администрировать множество элементов, разбитое на непересекающиеся подмножества. При этом каждому подмножеству назначается его представитель — элемент этого подмножества. У этой структуры данных есть 3 функции: Чтобы реализовать подобную структуру наиболее эффективно, нам нужны деревья. Реализация Функция make_set(x) реализовывается максимально просто. Функция find_dsu(x) реализовывается уже тяжелее. Тут мы применим первую эвристику DSU - сжатие путей. После того, как представитель таки будет найден, мы для каждой вершины по пути от X к корню изменим предка на этого самого представителя. То есть фактически переподвесим все эти вершины вместо длинной ветви непосредственно к корню. Функция union(x, y) требует второй э