Пироголяндiя
Як відомо, Пироголяндія "— країна, жителі якої дуже полюбляють пироги. Саме тому в ній побудовано пекарень, кожна з яких має унікальний цілий номер від до . У кожної пекарні є свій склад, що зберігає певну кількість пирогів, зокрема пекарня з номером зберігає пирогів на своєму складі.
Також між деякими пекарнями було прокладено дороги, по яких можна перевозити пироги від однієї пекарні до іншої. Усього було прокладено доріг, кожна з яких має свій унікальний цілий номер від до . -а дорога була прокладена між пекарнями та , тобто можна перевозити будь-яку кількість пирогів зі складу пекарні до складу пекарні та навпаки.
Шляхом між пекарнями та будемо називати послідовність унікальних номерів пекарень , таку, що існує дорога між кожною парою пекарень та , для будь-якого від до , а також та . Відомо, що між кожною парою пекарень існує рівно один шлях, що не відвідує жодну пекарню двічі.
Іноді у Пироголяндії трапляються землетруси, через що деякі дороги можуть ставати перекритими, а тому по них не можна перевозити пироги. Також іноді служба ремонту доріг може ремонтувати деякі з доріг, після чого вони стають знову доступними для перевезень. Отже, кожна дорога має мати один із двох станів "— вона має бути або неперекритою, або перекритою.
Компонентою пекарні будемо називати множину всіх пекарень, до яких є шлях від пекарні з номером , що не проходить через жодну перекриту дорогу. Сама пекарня також входить до своєї компоненти.
Одним із найвідоміших жителів Пироголяндії є Козак Вус, який отримав свою популярність на тому, що з'їв більше всіх пирогів на щорічному святі пироголюбів.
Іноді у Пироголяндії відбуваються різні події, що пов'язані з пекарнями, дорогами та нашим другом Козаком Вусом. Вам потрібно вміти оброблювати подій, що будуть подані у вигляді запитів різних типів, та вміти відповідати на деякі з них.
Усього є типів запитів:
Змінити стан дороги з номером на протилежний. Тобто якщо до цього запиту дорога з номером була перекритою, то після нього вона стає неперекритою, і навпаки, якщо дорога була неперекритою то вона стає перекритою.
До складу кожної пекарні, що належить компоненті пекарні із номером , завезли пирогів. Тобто якщо пекарня з номером належить компоненті пекарні , то треба збільшити значення на .
Усі пекарні з компоненти пекарні з номером перевозять усі свої пироги до складу пекарні з номером . Тобто після цього запиту на складі пекарні із номером будуть зберігатись усі пироги з усіх пекарень, що знаходяться в компоненті пекарні , а в усіх інших пекарнях цієї компоненти склади будуть пусті.
Козак Вус хоче дізнатись, скільки пирогів зберігається на складі пекарні з номером , тобто значення .
Козак Вус хоче дізнатися сумарну кількість пирогів, що зберігаються на складах пекарень із компоненти пекарні з номером .
Козак Вус з'їдає всі пироги зі складу кожної пекарні з компоненти пекарні з номером . Тобто після цього запиту для кожної пекарні , що належить компоненті пекарні , значення повинно бути рівним 0.
Козак Вус хоче дізнатись, яку мінімальну кількість доріг треба відремонтувати, щоб він міг з'їсти всі пироги, що зберігаються на складах пекарень Пироголяндії, якщо він може почати свій шлях із будь-якої пекарні та пересуватись лише по неперекритих дорогах.
Зауважте, що запити типів та ніяк не впливають на пекарні та дороги, вони лиш повинні знаходити відповідь.
Вхідні дані
Перший рядок містить три цілі числа , та (, ) "— кількість пекарень у Пироголяндії, кількість подій та номер блока відповідно.
-й з наступних рядків містить по два цілі числа та () "— пара пекарень між якими прокладено дорогу із номером . Гарантується, що між кожною парою пекарень є рівно один шлях.
Наступний рядок містить рядок з символів або . -й з цих символів рівний , якщо дорога з номером перекрита, та , якщо вона не перекрита.
Наступний рядок містить послідовність з цілих чисел () "— кількість пирогів на складі кожної пекарні.
Кожен із наступних рядків містить опис відповідного запиту. Перше число в рядку задає тип запиту. У випадку, якщо запит -го типу, то рядок містить ще два параметри () та (). Якщо тип запиту рівний , то рядок містить один додатковий параметр . Якщо тип запиту рівний від до , то рядок містить лише один додатковий параметр (). В іншому випадку, якщо запит -го типу, рядок не містить додаткових параметрів.
Протокол взаємодії
Вам потрібно реалізувати вісім функцій:
void init(integer n, array of integers u, array of integers v, array of integers b, array of integers a, integer g)
— кількість пекарень у Пироголяндії;
та () — номери пекарень, між якими прокладено -ту дорогу;
() рівне , якщо -та дорога перекрита, та інакше;
() — кількість пирогів в -ій пекарні;
— номер блока;
ця функція викликається першою лише один раз. Вона потрібна для того, щоб повідомити вам кількість пекарень у Пироголяндії, пари пекарень, між якими є дороги, стан кожної дороги, початкову кількість пирогів на складі кожної пекарні та номер блоку. Лише після виклику цієї функції будуть викликатись інші сім.
void query_1(integer p)
— номер дороги, стан якої треба змінити;
ця функція викликається, коли потрібно задати запит першого типу.
void query_2(integer p, integer w)
— номер пекарні;
— кількість пирогів, які завезли до кожної пекарні компоненти пекарні з номером ;
ця функція викликається, коли потрібно задати запит другого типу.
void query_3(integer p)
— номер пекарні;
ця функція викликається, коли потрібно задати запит третього типу.
integer query_4(integer p)
— номер пекарні;
ця функція викликається, коли потрібно задати запит четвертого типу;
функція має повернути ціле число — відповідь на запит.
integer query_5(integer p)
— номер пекарні;
ця функція викликається, коли потрібно задати запит п'ятого типу;
функція має повернути ціле число — відповідь на запит.
void query_6(integer p)
— номер пекарні;
ця функція викликається, коли потрібно задати запит шостого типу.
integer query_7()
ця функція викликається, коли потрібно задати запит сьомого типу;
функція має повернути ціле число — відповідь на запит.
Вихідні дані
На кожний запит типу , та виведіть відповідь в окремому рядку.
Приклади
5 11 0 1 2 1 3 3 4 3 5 0100 1 0 6 1 3 5 3 3 4 2 5 4 4 3 7 6 4 1 2 5 4 2 2 1 1 3 5 2
10 4 1 1 5
Примітка
На малюнках пекарні зображені у вигляді кола, всередині якого задано два цілі числа "— номер пекарні та кількість пирогів на складі цієї пекарні. Неперекриті дороги між пекарнями зображено суцільною лінією, а перекриті пунктирною.
На малюнку зображено Пироголяндію до всіх змін. Дорога з номером між пекарнями з номерами та перекрита. У компоненті пекарні з номером , так само як для пекарні з номером , знаходяться пекарні з номерами та . У компоненті пекарень із номерами , та знаходяться пекарні з номерами , та , отже, кількість пирогів у пекарнях із компоненти пекарні рівна .
Після другого запиту (Мал. ) пекарні з номерами та перевозять свої пироги до складу пекарні з номером .
Після третього запиту (Мал. ) до складу пекарень з номерами , та завезли по пироги, отже, кількість пирогів на складі пекарні з номером тепер рівна . На складі кожної пекарні, окрім пекарні з номером , є хоча б пиріг. Якщо Козак Вус почне свій шлях із пекарні з номером або , то йому доведеться відремонтувати дорогу з номером , щоб він міг дістатись пекарні з номером . Якщо він почне свій шлях з пекарні з номером або , або , то йому доведеться відремонтувати ту ж саму дорогу з номером , щоб дістатись до пекарні з номером . Тому відповідь на запит з номером рівна .
Після шостого запиту (Мал. ) Козак Вус з'їдає всі пироги зі складу пекарень з номерами , та .
Після сьомого запиту (Мал. ) служба ремонту доріг відремонтує дорогу з номером , тому тепер вона стає неперекритою. Тепер у компоненті пекарні з номером , так само як і для всіх інших пекарень, знаходяться всі пекарні Пироголяндії. Тому відповідь на восьмий запит рівна .
Після дев'ятого запиту (Мал. ) до складу кожної пекарні завезли по пирогу.
Після десятого запиту (Мал. ) через землетрус руйнується дорога з номером , тому вона стає перекритою. Тепер у компоненті пекарні з номером знаходяться всі пекарні, окрім пекарні з номером , а в компоненті пекарні з номером знаходиться лише вона сама. Тому відповідь на останній запит рівна .
Оцінювання
( балів) ; ; немає запитів типу та ; усі дороги спочатку перекриті;
( балів) ; ; немає запитів типу та ; усі дороги спочатку неперекриті;
( балів) ; ; немає запитів типу та ;
( балів) ; ; немає запитів типу ;
( балів) ; ;
( балів) немає запитів типу та ;
( балів) немає запитів типу ; у запитах типу дороги завжди змінюються лише з перекритих на неперекриті;
( балів) немає запитів типу ;
( балів) немає запитів типу ;
( балів) кожна пекарня поєднана дорогою не більше ніж з двома іншими пекарнями;
( балів) без додаткових обмежень;