2749 – Tată

From Bitnami MediaWiki

Cerința[edit | edit source]

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[edit | edit source]

Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spații.

Date de ieșire[edit | edit source]

Programul va afișa pe ecran mesajul DA, dacă t este vector de tați, sau mesajul NU în caz contrar.În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul "Nu corespunde restricțiilor impuse".

Restricții și precizări[edit | edit source]

  • 1 ≤ n ≤ 100.000
  • 0 ≤ t[i] ≤ n

Exemplul 1:[edit | edit source]

Intrare

5
0 1 1 3 3

Ieșire

DA

Exemplul 2:[edit | edit source]

Intrare

5
2 0 2 5 4

Ieșire

NU

Explicație[edit | edit source]

Nodul 4 are ca tată pe 5, iar nodul 5 are ca tată pe 4

Exemplul 3:[edit | edit source]

Intrare

100001

Consola

Datele nu corespund restrictiilor impuse

Rezolvare[edit | edit source]

<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
  1. Citeste numarul n

n = int(input("Introduceti numarul n: "))

  1. 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>