Олимпиадный тренинг

Задача . F. Дерево и XOR


Дан связный неориентированный граф без циклов (то есть дерево) на \(n\) вершинах, при этом на каждом ребре написано какое-то целое неотрицательное число.

Рассмотрим все пары вершин \((v, u)\) (то есть всего \(n^2\) таких пар) и для каждой пары посчитаем побитовое исключащее ИЛИ (xor) всех чисел на рёбрах на простом пути между \(v\) и \(u\). Если путь состоял только из одной вершины, то xor всех чисел на рёбрах этого пути считается равным \(0\).

Предположим, мы отсортировали полученные \(n^2\) значений по неубыванию. Требуется вывести \(k\)-е из них.

Операция xor определяется следующим образом:

Пусть даны два целых неотрицательных числа \(x\) и \(y\), рассмотрим их двоичные записи (возможно с ведущими нулями): \(x_k \dots x_2 x_1 x_0\) и \(y_k \dots y_2 y_1 y_0\) (где \(k\) любое число, что все биты \(x\) и \(y\) могут быть представлены). Здесь \(x_i\) это \(i\)-й бит числа \(x\), а \(y_i\) это \(i\)-й бит числа \(y\).

Пусть \(r = x \oplus y\) — результат операции xor над числами \(x\) и \(y\). Тогда двоичной записью \(r\) будет \(r_k \dots r_2 r_1 r_0\), где:

\(\) r_i = \left\{ \begin{aligned} 1, ~ \text{если} ~ x_i \ne y_i \\ 0, ~ \text{если} ~ x_i = y_i \end{aligned} \right. \(\)

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

Первая строка содержит два целых числа \(n\) и \(k\) (\(2 \le n \le 10^6\), \(1 \le k \le n^2\)) — количество вершин в дереве и номер пути в списке по неубыванию.

Каждая из следующих \(n - 1\) строк содержит два целых числа \(p_i\) и \(w_i\) (\(1 \le p_i \le i\), \(0 \le w_i < 2^{62}\)) — предка вершины \(i + 1\) и вес соответствующего ребра.

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

Выведите одно целое число — \(k\)-й по возрастанию xor пути в дереве.

Примечание

Дерево во втором тесте выглядит следующим образом:

В таком дереве существует \(9\) путей:

  1. \(1 \to 1\) со значением \(0\)
  2. \(2 \to 2\) со значением \(0\)
  3. \(3 \to 3\) со значением \(0\)
  4. \(2 \to 3\) (проходит через \(1\)) со значением \(1 = 2 \oplus 3\)
  5. \(3 \to 2\) (проходит через \(1\)) со значением \(1 = 2 \oplus 3\)
  6. \(1 \to 2\) со значением \(2\)
  7. \(2 \to 1\) со значением \(2\)
  8. \(1 \to 3\) со значением \(3\)
  9. \(3 \to 1\) со значением \(3\)

Примеры
Входные данныеВыходные данные
1 2 1
1 3
0
2 3 6
1 2
1 3
2

time 4000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя