Selezioni territoriali 2009

Depurazione dell'acqua (depura)

Difficoltà D = 2.

Descrizione del problema

Bisogna realizzare un procedimento chimico per la depurazione dell'acqua, avendo a disposizione un certo numero di sostanze, numerate da 1 in avanti. Per un'efficace depurazione, è necessario inserire nell'acqua la sostanza chimica purificante numero 1, tenendo presente che nell'acqua sono già presenti K sostanze chimiche.

Per quanto riguarda il procedimento adottato, valgono R precise regole per poter inserire le sostanze chimiche nell'acqua. Tali regole prevedono che una certa sostanza A possa essere inserita solo se nell'acqua sono già presenti un dato insieme di sostanze, ad esempio, A1, A2,..., An (dove Ai ≠ A per 1 ≤ i ≤ n). In tal caso, scriviamo tale regola di inserimento nel seguente modo A :-- A1, A2,..., An

e diciamo che A compare nella parte sinistra della regola. Al fine di un corretto inserimento delle sostanze, valgono le seguenti osservazioni:

Per esempio, ipotizzando che le sostanze 2 e 3 siano già presenti nell'acqua (K=2) e che valgano le seguenti regole (R=4):

4 :-- 2

5 :-- 2, 3

7 :-- 2, 4

1 :-- 3, 7, 4

possiamo inserire la sostanza 4 perché la sostanza 2 è già presente (prima regola); in seguito, possiamo inserire anche la sostanza 7 perché le sostanze 2 e 4 sono presenti nell'acqua (terza regola); a questo punto, possiamo aggiungere la sostanza 1 perché le sostanze 3, 7 e 4 sono presenti (ultima regola). Quindi abbiamo inserito un totale di S=3 sostanze, ossia 4, 7 e 1 (oltre alle K=2 già presenti), per purificare l'acqua.

Scrivere un programma che calcoli il numero minimo S di sostanze da inserire per purificare l'acqua, conoscendo le K sostanze già presenti nell'acqua e le R regole di inserimento. Tale numero sarà S = 0 se la sostanza 1 è già presente nell'acqua; sarà S = 1 se la sostanza 1 può essere inserita direttamente e non è già presente; in generale, sarà S = m se è necessario inserire m-1 sostanze prima di poter inserire la sostanza 1. Nel caso in cui non sia possibile purificare l'acqua, bisogna restituire il valore S = -1.

Dati di input

Il file input.txt è composto da K+R+1 righe.

La prima riga contiene due interi positivi separati da uno spazio, rispettivamente il numero K delle sostanze chimiche già presenti nell'acqua e il numero R di regole di inserimento.

La successive K righe contengono le K sostanze già presenti nell'acqua, dove ogni riga è composta da un solo intero positivo che rappresenta una di tali sostanze.

Le ultime R righe rappresentano le R regole, al massimo una regola per ciascuna sostanza non presente nell'acqua. Ciascuna riga è composta da n+2 interi positivi A, n, A1, A2,..., An separati da uno spazio (dove Ai ≠ A per 1 ≤ i ≤ n), i quali rappresentano la regola A :-- A1, A2,..., An.

Dati di output

Il file output.txt è composto da una sola riga contenente un intero S, il minimo numero di sostanze inserite (oltre alle K già presenti) per purificare l'acqua secondo le regole descritte sopra.

Assunzioni

Esempi di input/output

File input.txtFile output.txt
2 4
2
3
4 1 2
5 2 2 3
7 2 2 4
1 3 3 7 4
3


File input.txtFile output.txt
4 2
6
2
8
3
5 2 2 6
1 2 3 6
1


File input.txtFile output.txt
2 3
1
3
4 1 2
5 1 3
6 2 2 4
0


File input.txtFile output.txt
3 4
2
4
8
5 2 2 4
7 2 4 3
6 2 5 7
1 3 5 2 6
-1


Nota/e