<?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=4063_%E2%80%93_Cartierul</id>
	<title>4063 – Cartierul - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=4063_%E2%80%93_Cartierul"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4063_%E2%80%93_Cartierul&amp;action=history"/>
	<updated>2026-05-01T04:54:32Z</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=4063_%E2%80%93_Cartierul&amp;diff=10090&amp;oldid=prev</id>
		<title>Danciu: Pagină nouă:  = Cerința = Avem în cartier un arbore cu nodurile colorate și cu rădăcina nodul &lt;code&gt;1&lt;/code&gt;. Pentru fiecare nod &lt;code&gt;i&lt;/code&gt; al arborelui să se afișeze câte culori distincte sunt în subarborele cu rădăcina în &lt;code&gt;i&lt;/code&gt;.  = Date de intrare = Programul citește de la tastatură numărul &lt;code&gt;n&lt;/code&gt;, reprezentând numărul de noduri al arborelui. Pe a doua linie se vor afla &lt;code&gt;n&lt;/code&gt; valori, cea de a &lt;code&gt;i&lt;/code&gt; reprezentând culoarea nodului &lt;c...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4063_%E2%80%93_Cartierul&amp;diff=10090&amp;oldid=prev"/>
		<updated>2024-06-04T03:40:37Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă:  = Cerința = Avem în cartier un arbore cu nodurile colorate și cu rădăcina nodul &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;. Pentru fiecare nod &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; al arborelui să se afișeze câte culori distincte sunt în subarborele cu rădăcina în &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;.  = Date de intrare = Programul citește de la tastatură numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, reprezentând numărul de noduri al arborelui. Pe a doua linie se vor afla &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; valori, cea de a &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; reprezentând culoarea nodului &amp;lt;c...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
= Cerința =&lt;br /&gt;
Avem în cartier un arbore cu nodurile colorate și cu rădăcina nodul &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;. Pentru fiecare nod &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; al arborelui să se afișeze câte culori distincte sunt în subarborele cu rădăcina în &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Programul citește de la tastatură numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, reprezentând numărul de noduri al arborelui. Pe a doua linie se vor afla &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; valori, cea de a &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; reprezentând culoarea nodului &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;. Urmează &amp;lt;code&amp;gt;n-1&amp;lt;/code&amp;gt; linii, pe fiecare linie aflânduse &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; numere &amp;lt;code&amp;gt;a b&amp;lt;/code&amp;gt; indicând faptul ca între &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; este muchie.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Programul va afișa pe ecran &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere, cel de al &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;-lea fiind numărul de culori distincte din subarborele cu rădăcina în &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 200.000&amp;lt;/code&amp;gt;&lt;br /&gt;
* Culorile arborelui sunt numere naturale mai mici sau egale cu &amp;lt;code&amp;gt;1.000.000.000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
Intrare&lt;br /&gt;
 5&lt;br /&gt;
 2 3 2 2 1&lt;br /&gt;
 1 2&lt;br /&gt;
 1 3&lt;br /&gt;
 3 4&lt;br /&gt;
 3 5&lt;br /&gt;
Ieșire&lt;br /&gt;
 3 1 2 1 1&lt;br /&gt;
&lt;br /&gt;
== Rezovlare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
from collections import defaultdict, deque&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def distinct_colors_in_subtrees(n, colors, edges):&lt;br /&gt;
  &lt;br /&gt;
    tree = defaultdict(list)&lt;br /&gt;
    for a, b in edges:&lt;br /&gt;
        tree[a].append(b)&lt;br /&gt;
        tree[b].append(a)&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    subtree_colors = [set() for _ in range(n + 1)]&lt;br /&gt;
    result = [0] * (n + 1)&lt;br /&gt;
    visited = [False] * (n + 1)&lt;br /&gt;
&lt;br /&gt;
    def dfs(node):&lt;br /&gt;
        visited[node] = True&lt;br /&gt;
        subtree_colors[node].add(colors[node - 1])  # Add the color of the current node&lt;br /&gt;
        for neighbor in tree[node]:&lt;br /&gt;
            if not visited[neighbor]:&lt;br /&gt;
                dfs(neighbor)&lt;br /&gt;
                # Merge the color sets of the subtrees&lt;br /&gt;
                if len(subtree_colors[neighbor]) &amp;gt; len(subtree_colors[node]):&lt;br /&gt;
                    subtree_colors[node], subtree_colors[neighbor] = subtree_colors[neighbor], subtree_colors[node]&lt;br /&gt;
                subtree_colors[node].update(subtree_colors[neighbor])&lt;br /&gt;
        result[node] = len(subtree_colors[node])&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    dfs(1)&lt;br /&gt;
&lt;br /&gt;
    return result[1:]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
n = int(input())&lt;br /&gt;
colors = list(map(int, input().split()))&lt;br /&gt;
edges = [tuple(map(int, input().split())) for _ in range(n - 1)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
result = distinct_colors_in_subtrees(n, colors, edges)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;\n&amp;quot;.join(map(str, result)))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Danciu</name></author>
	</entry>
</feed>