5 - Novogodišnje stablo
Vremensko ograničenje | Memorijsko ograničenje |
---|---|
2000ms | 256MB |
Jovan je odlučio da okiti stablo koje mu raste u dvorištu za novu godinu. Jovanovo stablo ima \(N\) čvorova i \(N-1\) granu, tako da se od svakog čvora može doći do svakog drugog na jedinstven način korišćenjem nekog skupa grana. Od tih \(N\) čvorova, čvor numerisan brojem \(1\) je poseban, i njega nazivamo koren stabla. Podstablo čvora \(u\) je skup svih čvorova \(v\), takvih da \(u\) pripada skupu čvorova koji su na putu između čvora \(v\) i korena stabla. Specijalno, čvor \(u\) pripada podstablu čvora \(u\).
Na čvoru \(i\) visi ukras boje \(b_i\). Raznobojnost stabla definišemo kao broj različitih komponenti iste boje. Dva čvora pripadaju istoj komponenti ukoliko je moguće doći od jednog do drugog tako da svi čvorovi na tom putu imaju istu boju (uključujući i početni i krajnji).
Jovan još uvek nije siguran kako da okiti stablo. On će na stablu izvršiti \(Q\) promena oblika:
\(u\) \(c\) - Jovan će zameniti sve ukrase na čvorovima koji pripadaju podstablu čvora \(u\) sa ukrasima boje \(c\).
Pomozite Jovanu da okiti stablo i ispišite raznobojnost stabla posle svake izmene.
Opis ulaza
U prvom redu nalaze se brojevi \(N\) i \(Q\). U narednih \(N-1\) linija, nalaze se po dva broja \(u\) i \(v\), koji predstavljaju grane stabla. U narednoj liniji, nalazi se \(N\) brojeva, od kojih je \(i\)-ti broj \(b_i\) - boja ukrasa koji visi na čvoru \(i\). U poslednjih \(Q\) linija nalaze se po dva broja \(u\) i \(c\), koji predstavljaju izmene na stablu.
Opis izlaza
Za svaku od \(Q\) izmena ispisati raznobojnost stabla posle te izmene.
Ograničenja
- \(1 \leq N, Q \leq 2 \cdot 10^{5}\).
- \(1 \leq b_i, u, c \leq N\).
Test primeri su podeljeni u pet disjunktnih grupa:
- U test primerima vrednim 5 poena: \(N, Q \leq 10^3\).
- U test primerima vrednim 15 poena: \(c = 1\), tj. svaka izmena ima istu boju.
- U test primerima vrednim 15 poena: Postoji grana između \(i\) i \(i-1\) za svako \(2 \leq i \leq N\).
- U test primerima vrednim 20 poena: Postoji grana između \(i\) i \(\lfloor \frac{i}{2} \rfloor\) za svako \(2 \leq i \leq N\).
- U test primerima vrednim 45 poena: Nema dodatnih ograničenja.
Primeri
Primer 1
Ulaz
Izlaz
Objašnjenje
Nakon prve izmene, istobojne komponente se sastoje od čvorova: \(\{1,3\},\{2\},\{4\},\{5\},\{6\}\).
Nakon druge izmene, istobojne komponente se sastoje od čvorova: \(\{1,3\},\{2,4\},\{5\},\{6\}\).
Nakon treće izmene, istobojne komponente se sastoje od čvorova: \(\{1,2,3,4,5,6\}\).
Nakon četvrte izmene, istobojne komponente se sastoje od čvorova: \(\{1,3,6\},\{2,4,5\}\).
Autor | Tekst i test primeri | Analiza rеšenja | Testiranje |
---|---|---|---|
Aleksa Milisavljević | Aleksa Milisavljević | Mladen Puzić | Tadija Šebez |
Nazovimo roditeljem čvora \(x\) (koji nije koren) prvi čvor na koji naiđemo kada od \(x\) krenemo ka korenu (čvoru \(1\)). Najbitniji zaključak je onda da je broj komponenti iste boje jednak broju čvorova koji su drugačije obojeni od svog roditelja, plus jedan. Ovakve čvorove ćemo od sad zvati lepi čvorovi. Ovo važi, jer ako za svaku komponentu uzmemo čvor koji je najbliže korenu, znamo da je njegov roditelj druge boje. Samim tim postoji bijekcija između broja komponenti i lepih čvorova (plus jedan dodajemo zbog komponente u kojoj se nalazi sam koren).
Na početku, potrebno je da jednim prolaskom kroz stablo nađemo roditelja svakom čvoru (DFS obilaskom iz korena) i izbrojimo koliko na početku ima lepih čvorova. Sada posmatrajmo šta se desi kada podstablo čvora \(u\) obojimo bojom \(c\). Svi lepi čvorovi unutar strogog podstabla \(u\) (podstabla ne računajući čvor \(u\)) nestaju (jer svi čvorovi u tom podstablu sad imaju istu boju), a sam čvor \(u\) je lep čvor ukoliko je \(c\) različito od boje njegovog roditelja.
Skup lepih čvorova možemo održavati na primer koristeći binarno pretraživo stablo (odnosno set u C++). Takođe se može koristiti segmentno stablo sa lenjom propagacijom. Za čuvanje podataka o tome koji čvor je koje boje moramo koristiti segmentno stablo sa lenjom propagacijom (ili sličnu strukturu). Ovo ćemo raditi nad DFS obilaskom stabla, odnosno spljoštenim stablom. Krajnja vremenska složenost je \(O(N+QlogN)\) ili \(O((N+Q)logN))\), u zavisnosti od implementacije.
05_novogodisnje_stablo.cpp | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
|