0643 – Det Drum1

From Bitnami MediaWiki

Cerința[edit | edit source]

Se dă vectorul de tați al unui arbore cu rădăcină cu n noduri și un nod k. Determinați drumul de la rădăcina arborelui la nodul k.

Date de intrare[edit | edit source]

Fișierul de intrare detdrum1IN.txt conține pe prima linie numărul de noduri n și nodul k. Pe linia următoare se află vectorul de tați al arborelui, valorile fiind separate prin spații.

Date de ieșire[edit | edit source]

Fișierul de ieșire detdrum1OUT.txt va conține pe prima linie nodurile care alcătuiesc drumul determinat, separate printr-un spațiu.

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

  • 1 ≤ n ≤ 100
  • 1 ≤ k ≤ n
  • în vectorul de tați rădăcina este marcată cu 0

Exemplul 1[edit | edit source]

detdrum1IN.txt:

7 2

4 1 7 0 7 7 1

detdrum1OUT.txt:

4 1 2

Exemplul 2[edit | edit source]

detdrum1IN.txt:

101 2

4 1 7 0 7 7 1

Output:

Invalid input. Please check the conditions.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python3" line="1"> def is_valid_input(n, k):

   return 1 <= n <= 100 and 1 <= k <= n

with open("detdrum1IN.txt", "r") as infile, open("detdrum1OUT.txt", "w") as outfile:

   n, k = map(int, infile.readline().split())
   if not is_valid_input(n, k):
       print("Invalid input. Please check the conditions.")
   else:
       t = [0] + list(map(int, infile.readline().split()))
       def detdrum(nod):
           if nod == 0:
               return
           detdrum(t[nod])
           outfile.write(str(nod) + " ")
       detdrum(k)

</syntaxhighlight>