2749 – Tată
Cerința
Se dă un vector t=(t[1], t[2], ..., t[n])
care memorează numere naturale cuprinse între 0
și n
. Să se verifice dacă t
este sau nu vector de tați asociat unui arbore cu rădăcină.
Date de intrare
Programul citește de la tastatură numărul n
, iar apoi n
numere naturale, separate prin spații.
Date de ieșire
Programul va afișa pe ecran mesajul DA
, dacă t
este vector de tați, sau mesajul NU
în caz contrar.
Restricții și precizări
1 ≤ n ≤ 100.000
0 ≤ t[i] ≤ n
Exemplul 1:
Intrare
5 0 1 1 3 3
Ieșire
DA
Exemplul 2:
Intrare
5 2 0 2 5 4
Ieșire
NU
Explicație
Nodul 4
are ca tată pe 5
, iar nodul 5
are ca tată pe 4
Exemplul 3:
Intrare
100001
Consola
Datele nu corespund restrictiilor impuse
Rezolvare
<syntaxhighlight lang="python3"> def sunt_restrictii_incorecte(n, t):
# Verifică restricțiile pentru n if not (1 <= n <= 100000): return True
# Verifică restricțiile pentru t[i] for i in range(n): if not (0 <= t[i] <= n): return True
return False
def este_vector_de_tati(t):
n = len(t)
# Verifică dacă restricțiile sunt respectate if sunt_restrictii_incorecte(n, t): return False
# Verifică dacă rădăcina arborelui este corectă if t[0] != 0: return False
# Verifică dacă fiecare element al vectorului este un index valid for i in range(1, n): if not (0 <= t[i] < n): return False
return True
- Citeste numarul n
n = int(input("Introduceti numarul n: "))
- Ieși din program dacă restricțiile pentru n nu sunt respectate
if n < 1 or n > 100000:
print("Datele nu corespund restrictiilor impuse")
else:
# Citeste vectorul t t = list(map(int, input("Introduceti vectorul t: ").split()))
# Verifica daca restrictiile sunt respectate si afiseaza mesajul corespunzator if sunt_restrictii_incorecte(n, t): print("Datele nu corespund restrictiilor impuse") else: # Verifica daca t este vector de tati si afiseaza rezultatul if este_vector_de_tati(t): print("DA") else: print("NU")
</syntaxhighlight>