Ako isto viete, nie každá kukurica je rovnaká. Niektoré odrody sú šťavnaté, iné majú zas obrovské obilky. Podaktoré sú dokonca aj dúhové!!! A povedzte mi, kto by už na svojom poli nechcel mať takúto biodiverzitu? Presne takto každoročne rozmýšľa aj Adam. Doteraz to mal pomerne jednoduché, na dedinskej burze vedel za výhodnú cenu jedného Trojkenu vykonať ľubovoľnú z barterových ponúk. Tento rok sa ale Americkým vedcom podarilo nevídané. Dokážu upravovať genetický kód kukurice, skoro úplne, ako sa im zachce1! Dokonca si otvorili aj pobočku v Adamovej rodnej dedine, Kombajnovských Klasoviciach. Za svoje služby si neúčtujú nič menej ako jeden Trojken. Pomôžte Adamovi zistiť, koľko najmenej Trojkenov musí zaplatiť za to, aby z jeho nudnej odrody kukurice získal nejakú zaujímavejšiu.
Úloha
Každá odroda kukurice sa dá jednoznačne určiť jej genetickým kódom
ako reťazec, ktorý sa skladá len z písmen L
a
R
(môže byť aj prázdny). Za jeden Trojken dokáže genetické
laboratórium v Kombajnovských Klasoviciach odstrániť gén na konci
genetického kódu nejakej odrody alebo pridať na koniec ľubovoľný z génov
L
a R
. Na burze taktiež existuje \(n\) barterových ponúk, ktoré sa vzťahujú na
odrody \(a_i\) a \(b_i\). Za vykonanie jednej výmeny zaplatí
Adam jednej Trojken a môže vymeniť odrodu \(a_i\) za odrodu \(b_i\) alebo naopak. Adama by zaujímalo
\(q\) scenárov, v ktorých začína s
odrodou s genómom \(z_i\) a chcel by
skončiť s genómom \(k_i\). Zistite,
koľko najmenej Trojkenov ho to môže stáť.
Formát vstupu
V prvom riadku vstupu sú čísla \(n\) a \(q\) \((0 \leq n \leq 10^3, 1 \leq q \leq 10^4)\) udávajúce počet barterových ponúk na burze a počet scenárov, na ktoré Adama zaujíma odpoveď. V ďalších \(n\) riadkoch sa na každom nachádzajú \(2\) reťazce \(a_i\) a \(b_i\), ktoré hovoria, že odroda s genómom \(a_i\) sa dá vymeniť za odrodu s genómom \(b_i\) za zaplatenie \(1\) Trojkenu a naopak. Nasleduje \(q\) riadkov, na každom z nich sa nachádzajú \(2\) reťazce \(z_i\) a \(k_i\). Pre každý riadok vypíšte, koľko najmenej Trojkenov treba zaplatiť na to, aby Adam z odrody \(z_i\) dostal odrodu \(k_i\).
Všetky reťazce genómov na vstupe sa skladajú len z písmen
L
a R
a obsahujú aspoň jedno písmeno. Existuje
ale aj kukurica s prázdnym genómom.
Obmedzenia
Označme si \(D\) najväčšiu dĺžku reťazca na vstupe. Potom pre všetky sady platí, že \((n+q) \cdot D \leq 2 \cdot 10^6\).
V jednotlivých sadách navyše platia nasledujúce obmedzenia:
Sada | 1 | 2 | 3 | 4 |
---|---|---|---|---|
\(0 \leq n \leq\) | \(10\) | \(100\) | \(1000\) | \(1000\) |
\(1 \leq q \leq\) | \(10\) | \(100\) | \(500\) | \(10\,000\) |
\(1 \leq D \leq\) | \(10\) | \(100\) | \(1000\) | \(1000\) |
Keďže je vstup veľmi veľký, odporúčame v jazyku C++
použiť rýchle načítavanie vstupu
cin.tie(0)->sync_with_stdio(0)
a namiesto
endl
používať '\n'
.
Formát výstupu
Vypíšte \(q\) riadkov, na \(i\)-tom z nich, koľko najmenej Trojkenov treba zaplatiť na to, aby Adam získal zo začiatočnej odrody koncovú.
Príklady
Input:
2 2
R LL
RR RLR
LLL RLR
RRL RLR
Output:
4
2
V prvom scenári jedna z najlacnejších možností môže vyzerať
napríklad takto. Najprv odstránime posledný gén, čím dostaneme odrodu
LL
. Tú dokážeme za jeden Trojken zmeniť za odrodu
R
. Potom už len stačí pridať postupne gény L
a
R
. Celkovo zaplatíme 4 Trojkeny. V druhom scenári vyzerá
najlacnejšia možnosť takto. Najprv odstránime posledný gén a potom
vymeníme odrodu RR
za odrodu RLR
. Takto
zaplatíme 2 Trojkeny.
Input:
0 1
LLR LR
Output:
3
Je zbytočné na začiatku pridávať nejaké gény na koniec, keďže
neexistujú žiadne barterové ponuky. Preto je optimálne 2-krát odstrániť
posledný gén a raz pridať gén R
na koniec, čo stojí spolu 3
Trojkeny.
Odovzdávanie
Na odovzdávanie sa musíš prihlásiť
Otázky a diskusia
Po skončení kola budete mať príležitosť na diskutovanie o riešeniach v diskusii pod vzorovým riešením.