<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=0637_%E2%80%93_Frunze</id>
	<title>0637 – Frunze - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=0637_%E2%80%93_Frunze"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0637_%E2%80%93_Frunze&amp;action=history"/>
	<updated>2026-05-01T08:56:03Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0637_%E2%80%93_Frunze&amp;diff=7739&amp;oldid=prev</id>
		<title>AntalKrisztian: Pagină nouă: == Cerinţa == Se dă vectorul de tați al unui arbore cu rădăcină cu &#039;&#039;&#039;n&#039;&#039;&#039; noduri. Determinați rădăcina arborelui și frunzele acestuia. == Date de intrare == Fișierul de intrare &#039;&#039;&#039;frunzein.txt&#039;&#039;&#039; conține pe prima linie numărul de noduri &#039;&#039;&#039;n&#039;&#039;&#039;. Pe linia următoare se află vectorul de tați al arborelui, valorile fiind separate prin spații. == Date de ieşire == Fișierul de ieșire &#039;&#039;&#039;frunzeout.txt&#039;&#039;&#039; va conține pe prima linie rădăcina arborelui. A doua li...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0637_%E2%80%93_Frunze&amp;diff=7739&amp;oldid=prev"/>
		<updated>2023-12-10T13:38:46Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == Cerinţa == Se dă vectorul de tați al unui arbore cu rădăcină cu &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; noduri. Determinați rădăcina arborelui și frunzele acestuia. == Date de intrare == Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;frunzein.txt&amp;#039;&amp;#039;&amp;#039; conține pe prima linie numărul de noduri &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;. Pe linia următoare se află vectorul de tați al arborelui, valorile fiind separate prin spații. == Date de ieşire == Fișierul de ieșire &amp;#039;&amp;#039;&amp;#039;frunzeout.txt&amp;#039;&amp;#039;&amp;#039; va conține pe prima linie rădăcina arborelui. A doua li...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă vectorul de tați al unui arbore cu rădăcină cu &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; noduri. Determinați rădăcina arborelui și frunzele acestuia.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;frunzein.txt&amp;#039;&amp;#039;&amp;#039; conține pe prima linie numărul de noduri &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;. Pe linia următoare se află vectorul de tați al arborelui, valorile fiind separate prin spații.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fișierul de ieșire &amp;#039;&amp;#039;&amp;#039;frunzeout.txt&amp;#039;&amp;#039;&amp;#039; va conține pe prima linie rădăcina arborelui. A doua linia va conține numărul de frunze din arbore, iar următoarea linie frunzele, în ordine crescătoare și separate printr-un spațiu.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;1 &amp;amp;les; n &amp;amp;les; 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* în vectorul de tați rădăcina este marcată cu &amp;#039;&amp;#039;&amp;#039;0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; frunzein.txt&lt;br /&gt;
 7&lt;br /&gt;
 4 1 7 0 7 7 1&lt;br /&gt;
; frunzeout.txt&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse.&lt;br /&gt;
 4&lt;br /&gt;
 4&lt;br /&gt;
 2 3 5 6  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; frunzein.txt&lt;br /&gt;
 jjgrgjrfrf&lt;br /&gt;
; frunzeout.txt&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# Funcția de validare verifică dacă datele de intrare sunt în intervalul specificat&lt;br /&gt;
def validare(n_validare, tati_validare):&lt;br /&gt;
    # Verificăm dacă n este în intervalul 1-100&lt;br /&gt;
    if n_validare &amp;lt; 1 or n_validare &amp;gt; 100:&lt;br /&gt;
        raise ValueError  # Ridicăm o eroare dacă n nu este în intervalul 1-100&lt;br /&gt;
    # Verificăm dacă rădăcina este marcată cu 0 în vectorul de tați&lt;br /&gt;
    if 0 not in tati_validare:&lt;br /&gt;
        raise ValueError  # Ridicăm o eroare dacă rădăcina nu este marcată cu 0&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Funcția radacina_frunze determină rădăcina arborelui și frunzele acestuia&lt;br /&gt;
def radacina_frunze(n, tati):&lt;br /&gt;
    # Rădăcina arborelui este nodul care are tatăl 0&lt;br /&gt;
    radacina_tati = tati.index(0) + 1&lt;br /&gt;
    # Frunzele arborelui sunt nodurile care nu sunt tați pentru niciun nod&lt;br /&gt;
    frunze_tati = sorted(set(range(1, n + 1)) - set(tati))&lt;br /&gt;
    return radacina_tati, frunze_tati&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;#039;__main__&amp;#039;:&lt;br /&gt;
    file_in = open(&amp;quot;frunzein.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;frunzeout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim numărul de noduri&lt;br /&gt;
        n_main = int(file_in.readline())&lt;br /&gt;
        # Citim vectorul de tați&lt;br /&gt;
        tati_main = list(map(int, file_in.readline().split()))&lt;br /&gt;
        # Validăm datele de intrare&lt;br /&gt;
        validare(n_main, tati_main)&lt;br /&gt;
        # Determinăm rădăcina arborelui și frunzele acestuia&lt;br /&gt;
        radacina, frunze = radacina_frunze(n_main, tati_main)&lt;br /&gt;
        # Scriem rădăcina și frunzele în fișierul de ieșire&lt;br /&gt;
        file_out.write(str(radacina) + &amp;#039;\n&amp;#039;)&lt;br /&gt;
        file_out.write(str(len(frunze)) + &amp;#039;\n&amp;#039;)&lt;br /&gt;
        file_out.write(&amp;#039; &amp;#039;.join(map(str, frunze)) + &amp;#039;\n&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
    # Dacă datele de intrare nu sunt valide, afișăm un mesaj de eroare&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    # Dacă datele de intrare sunt incomplete, afișăm un mesaj de eroare&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
</feed>