Неперетинні множини (disjoint sets)

Перегляд у форматі PDF

Надіслати розв'язок

Бали: 3,00 (partial)
Time limit: 1.0s
Memory limit: 256M
Input: stdin
Output: stdout

Problem type

Напишіть програму, яка міститиме реалізацію структури даних для сукупності неперетинних підмножин (disjoint sets) і оброблятиме послідовність запитів таких виглядів:

RESET n – створити нову серію підмножин: множина з самого лише елемента 0, з самого лише елемента 1, і так до множини з самого лише елемента n–1 включно. Якщо структура вже містила якусь іншу сукупність неперетинних підмножин, уся відповідна інформація втрачається. При цьому слід вивести два слова через пробіл RESET DONE.

JOIN j k – з'єднати підмножини, яким належать елемент j та елемент k. Якщо елементи і так належали одній підмножині, вивести слово ALREADY, після нього через пробіли ті самі числа j та k в тому самому поряку. Якщо елементи досі належали різним підмножинам, то дія відбувається лише зі структурою даних у пам'яті, нічого не виводиться.

CHECK j k – перевірити, одній чи різним підмножинам у даний момент належать елемент j та елемент k; вивести слово YES (якщо одній) або слово NO (якщо різним).

Вхідні дані

У вхідних даних записано послідовність запитів RESET, JOIN та CHECK – кожен у окремому рядку, згідно вищеописаного формату. Гарантовано, що перший рядок містить запит RESET, а загальна кількість запитів RESET невелика. Також гарантовано, що в кожному запиті JOIN та в кожному запиті CHECK обидва числа будуть в діапазоні від 0 до n–1, де n – параметр останнього виконаного запиту RESET.

Результати

Для запитів CHECK та тих запитів JOIN, де елементи і так належать одній підмножині, виведіть результати. Результат кожного такого запиту виводити в окремому рядку, слова писати великими латинськими буквами без лапок.

Приклади

Вхід

RESET 15
JOIN 14 10
JOIN 13 8
JOIN 0 9
JOIN 8 3
JOIN 4 1
JOIN 10 5
JOIN 8 4
CHECK 2 11
JOIN 4 1
JOIN 2 6
CHECK 9 1
JOIN 6 5
CHECK 10 5

Результат

RESET DONE
NO
ALREADY 4 1
NO
YES

Примітки

Відповіді «NO» даються на запити «CHECK 2 11» та «CHECK 9 1», відповідь «ALREADY 4 1» – на «JOIN 4 1» (10-й запит), «YES» – на «CHECK 10 5».

Реалізувати структуру даних disjoint sets слід самостійно (наскільки відомо автору задачі, у стандартних бібліотеках поширених мов програмування її все одно нема).

Тести та обмеження підбиралися так, щоб проходила реалізація, що містить оптимізацію «при з'єднаннях, слід приєднувати множину меншого рангу до множини більшого рангу, а не навпаки», але не містить жодної іншої оптимізації. Чи будуть проходити реалізації, де замість цієї оптимізації вжита деяка інша – невідомо (як вийде, так і буде). Реалізації, де нема ні вищезгаданої оптимізації, ні якоїсь альтернативної, по ідеї повинні не проходити.


Коментарі

Please read the guidelines before commenting.


Ще немає коментарів.