#!/usr/bin/python3 import queue class Vrchol: stupen = 0 sousede = [] nakazenych_sousedu = 0 nakazen = False krok = -1 # Krok, ve kterém byl vrchol nakažen fronta = queue.Queue() ################################################################################ nakazenych = 0 pocet_kroku = 0 # Funkce provádějící nakažení vrcholu a jeho přidání do fronty: def nakaz(i, krok): global nakazenych global pocet_kroku vrchol[i].nakazen = True vrchol[i].krok = krok nakazenych += 1 fronta.put(i) pocet_kroku = krok # updatujeme maximální počet kroků # A) Načítání vstupu # 1. Načtení první řádky vstup = input().split() N = int(vstup[0]) infikovano = int(vstup[1]) # 2. Vyrobíme si pole N vrcholů: vrchol = [] for i in range(N): vrchol.append(Vrchol()) # 3. Načteme infikované vrcholy z druhého řádku a nakazíme je: infikovane = input().split() for i in infikovane: nakaz(int(i), 0) # 4. Načteme sousedy každého vrcholu for v in vrchol: radek = input().split() v.stupen = int(radek[1]) v.sousede = [int(x) for x in radek][2:] # B) Postupné zpracování nakažených vrcholů while not fronta.empty(): i = fronta.get() for s in vrchol[i].sousede: # Již nakažené vrcholy přeskakujeme if vrchol[s].nakazen: continue vrchol[s].nakazenych_sousedu += 1 if 2 * vrchol[s].nakazenych_sousedu >= vrchol[s].stupen: nakaz(s, vrchol[i].krok + 1) # C) Vypsání výstupu if nakazenych == N: print(pocet_kroku + 1) else: print("NELZE")