<?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=0550_-_Mere</id>
	<title>0550 - Mere - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=0550_-_Mere"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0550_-_Mere&amp;action=history"/>
	<updated>2026-05-01T03:41:54Z</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=0550_-_Mere&amp;diff=8902&amp;oldid=prev</id>
		<title>Brianna Waltner: Pagină nouă: == Cerinţa == Țăranul Ion are în livada sa &#039;&#039;&#039;N&#039;&#039;&#039; pomi, fiecare cu &#039;&#039;&#039;v[i]&#039;&#039;&#039; mere. Între pomi există N-1 cărări, astfel încât între oricare doi pomi să existe un singur drum, alcătuit eventual din mai multe cărări. Pentru că nu și-a plătit ratele la bancă, el este nevoit să vândă o parte dintre pomi. El vrea să adune merele din livadă, dar pentru că nu are foarte mult timp, el va aduna merele doar dintr-o parte din pomi.  Ion pornește din pomul lui...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0550_-_Mere&amp;diff=8902&amp;oldid=prev"/>
		<updated>2024-01-03T18:19:11Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == Cerinţa == Țăranul Ion are în livada sa &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039; pomi, fiecare cu &amp;#039;&amp;#039;&amp;#039;v[i]&amp;#039;&amp;#039;&amp;#039; mere. Între pomi există N-1 cărări, astfel încât între oricare doi pomi să existe un singur drum, alcătuit eventual din mai multe cărări. Pentru că nu și-a plătit ratele la bancă, el este nevoit să vândă o parte dintre pomi. El vrea să adune merele din livadă, dar pentru că nu are foarte mult timp, el va aduna merele doar dintr-o parte din pomi.  Ion pornește din pomul lui...&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;
Țăranul Ion are în livada sa &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039; pomi, fiecare cu &amp;#039;&amp;#039;&amp;#039;v[i]&amp;#039;&amp;#039;&amp;#039; mere. Între pomi există N-1 cărări, astfel încât între oricare doi pomi să existe un singur drum, alcătuit eventual din mai multe cărări. Pentru că nu și-a plătit ratele la bancă, el este nevoit să vândă o parte dintre pomi. El vrea să adune merele din livadă, dar pentru că nu are foarte mult timp, el va aduna merele doar dintr-o parte din pomi.&lt;br /&gt;
&lt;br /&gt;
Ion pornește din pomul lui preferat, pomul &amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039;, și se deplasează spre unul din vecinii lui. Pentru că nu este foarte inteligent, atunci când Ion se află la un pom, el se va deplasa către pomul vecin care are cele mai multe mere, fără să ia în calcul ceilalți meri din livadă. Dacă doi pomi au același număr de mere, atunci Ion se va deplasa spre pomul cu numărul de ordine mai mic.&lt;br /&gt;
&lt;br /&gt;
Ajutați-l pe Ion să afle câte mere va aduna folosind metoda sa!&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Pe prima linie a fișierului de intrare &amp;#039;&amp;#039;&amp;#039;merein.txt&amp;#039;&amp;#039;&amp;#039; se află un număr natural &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039;, reprezentând numărul de pomi din livadă; pe linia a doua se află &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039; valori &amp;#039;&amp;#039;&amp;#039;v[i]&amp;#039;&amp;#039;&amp;#039;, reprezentând numărul de mere din pomul &amp;#039;&amp;#039;&amp;#039;i&amp;#039;&amp;#039;&amp;#039;. Pe următoarele &amp;#039;&amp;#039;&amp;#039;N-1&amp;#039;&amp;#039;&amp;#039; linii se află câte o pereche de numere &amp;#039;&amp;#039;&amp;#039;x y&amp;#039;&amp;#039;&amp;#039;, cu semnificația că există o cărare de la pomul &amp;#039;&amp;#039;&amp;#039;x&amp;#039;&amp;#039;&amp;#039; la pomul &amp;#039;&amp;#039;&amp;#039;y&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &amp;#039;&amp;#039;&amp;#039;mereout.txt&amp;#039;&amp;#039;&amp;#039; va conține pe prima linie numărul &amp;#039;&amp;#039;&amp;#039;S&amp;#039;&amp;#039;&amp;#039;, reprezentând numărul total de mere culese.&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; 1000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;1 &amp;amp;les; v[i] &amp;amp;les; 10000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;&amp;#039;&amp;#039;&amp;#039;merein.txt&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 6&lt;br /&gt;
 3 1 2 3 2 1&lt;br /&gt;
 1 2&lt;br /&gt;
 1 3&lt;br /&gt;
 2 4&lt;br /&gt;
 2 5&lt;br /&gt;
 2 6&lt;br /&gt;
;&amp;#039;&amp;#039;&amp;#039;mereout.txt&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 5&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;&amp;#039;&amp;#039;&amp;#039;merein.txt&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 65000&lt;br /&gt;
 3 1 2 3 2 1&lt;br /&gt;
 1 2&lt;br /&gt;
 1 3&lt;br /&gt;
 2 4&lt;br /&gt;
 2 5&lt;br /&gt;
 2 6&lt;br /&gt;
;&amp;#039;&amp;#039;&amp;#039;mereout.txt&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
from collections import defaultdict&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def dfs(node, parent):&lt;br /&gt;
    global ans, maxv, idx, visit, g, apple&lt;br /&gt;
    visit[node] = True&lt;br /&gt;
    for neighbour in g[node]:&lt;br /&gt;
        if neighbour != parent and not visit[neighbour]:&lt;br /&gt;
            dfs(neighbour, node)&lt;br /&gt;
            if apple[neighbour] &amp;gt; maxv[node]:&lt;br /&gt;
                maxv[node] = apple[neighbour]&lt;br /&gt;
                idx[node] = neighbour&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def solve():&lt;br /&gt;
    global ans, maxv, idx, visit, g, apple&lt;br /&gt;
    dfs(1, 0)&lt;br /&gt;
    node = 1&lt;br /&gt;
    while node:&lt;br /&gt;
        ans += apple[node]&lt;br /&gt;
        node = idx[node]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    g = defaultdict(list)&lt;br /&gt;
    ans = 0&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;#039;merein.txt&amp;#039;, &amp;#039;r&amp;#039;) as fin:&lt;br /&gt;
        N = int(fin.readline().strip())&lt;br /&gt;
        if N &amp;lt; 1 or N &amp;gt; 1000:&lt;br /&gt;
            with open(&amp;#039;mereout.txt&amp;#039;, &amp;#039;w&amp;#039;) as fout:&lt;br /&gt;
                fout.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
            exit(0)&lt;br /&gt;
        apple = [0] + list(map(int, fin.readline().split()))&lt;br /&gt;
        maxv = [0]*(N+1)&lt;br /&gt;
        idx = [0]*(N+1)&lt;br /&gt;
        visit = [False]*(N+1)&lt;br /&gt;
&lt;br /&gt;
        for _ in range(N-1):&lt;br /&gt;
            u, v = map(int, fin.readline().split())&lt;br /&gt;
            g[u].append(v)&lt;br /&gt;
            g[v].append(u)&lt;br /&gt;
&lt;br /&gt;
    solve()&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;#039;mereout.txt&amp;#039;, &amp;#039;w&amp;#039;) as fout:&lt;br /&gt;
        fout.write(str(ans) if ans else &amp;quot;Datele de intrare corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
 Ion va culege merele din pomii &amp;#039;&amp;#039;&amp;#039;1 3&amp;#039;&amp;#039;&amp;#039;, obținând &amp;#039;&amp;#039;&amp;#039;3+2=5&amp;#039;&amp;#039;&amp;#039; mere.&lt;/div&gt;</summary>
		<author><name>Brianna Waltner</name></author>
	</entry>
</feed>