<?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=2539_-_flori4</id>
	<title>2539 - flori4 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=2539_-_flori4"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2539_-_flori4&amp;action=history"/>
	<updated>2026-05-02T22:52:02Z</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=2539_-_flori4&amp;diff=10083&amp;oldid=prev</id>
		<title>Danciu: Pagină nouă:  Compania lui Jimmy are &lt;code&gt;n&lt;/code&gt; plantații cu flori. Pentru fiecare plantație se cunoaște tipul florilor cultivate, respectiv câte tone de flori au fost produse anul acesta. Se cunoaște că plantațiile cu flori sunt conectate prin &lt;code&gt;n - 1&lt;/code&gt; drumuri astfel încât la fiecare plantație se poate ajunge de la oricare altă plantație și există un singur mod de ajunge de la plantația &lt;code&gt;x&lt;/code&gt; la plantația &lt;code&gt;y&lt;/code&gt; , pentru fiecare &lt;code&gt;1 ≤...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2539_-_flori4&amp;diff=10083&amp;oldid=prev"/>
		<updated>2024-06-04T02:57:25Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă:  Compania lui Jimmy are &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; plantații cu flori. Pentru fiecare plantație se cunoaște tipul florilor cultivate, respectiv câte tone de flori au fost produse anul acesta. Se cunoaște că plantațiile cu flori sunt conectate prin &amp;lt;code&amp;gt;n - 1&amp;lt;/code&amp;gt; drumuri astfel încât la fiecare plantație se poate ajunge de la oricare altă plantație și există un singur mod de ajunge de la plantația &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; la plantația &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt; , pentru fiecare &amp;lt;code&amp;gt;1 ≤...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
Compania lui Jimmy are &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; plantații cu flori. Pentru fiecare plantație se cunoaște tipul florilor cultivate, respectiv câte tone de flori au fost produse anul acesta. Se cunoaște că plantațiile cu flori sunt conectate prin &amp;lt;code&amp;gt;n - 1&amp;lt;/code&amp;gt; drumuri astfel încât la fiecare plantație se poate ajunge de la oricare altă plantație și există un singur mod de ajunge de la plantația &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; la plantația &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt; , pentru fiecare &amp;lt;code&amp;gt;1 ≤ x, y ≤ n&amp;lt;/code&amp;gt;. De asemenea, știm și distanța în km pentru fiecare dintre cele &amp;lt;code&amp;gt;n - 1&amp;lt;/code&amp;gt; drumuri.&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Jimmy vrea să aducă toate florile de același tip în același loc, cu cost minim de transport. Dacă avem &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; tone de flori şi vrem să le trimitem pe o distanță de &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; kilometri, costul transportului este &amp;lt;code&amp;gt;a * b&amp;lt;/code&amp;gt;. Pentru fiecare tip de floare Jimmy vrea să determine costul minim de transport pentru a aduce toate florile de același tip la un loc.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Pe prima linie se va găsi numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, apoi, pe cea de-a doua linie, &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; litere mici separate între ele prin câte un spațiu, care simbolizează tipul de floare produs pe plantația &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; (fiecare tip de floare este o literă mică a alfabetului englez). Pe cea de-a treia linie se găsesc &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere întregi care reprezintă câte tone din fiecare floare au fost produse pe plantația &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;. Pe fiecare dintre următoarele &amp;lt;code&amp;gt;n - 1&amp;lt;/code&amp;gt; linii se găsesc trei numere naturale &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;d&amp;lt;/code&amp;gt;, cu semnificația că există drum direct între plantațiile &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;, iar numărul &amp;lt;code&amp;gt;d&amp;lt;/code&amp;gt; reprezintă distanța de la &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Pe prima linie se afișează &amp;lt;code&amp;gt;26&amp;lt;/code&amp;gt; de numere separate prin spațiu, al &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;-lea număr reprezentând costul minim de transport pentru tipul de floare specificat de litera de pe poziția &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; în alfabetul englez (răspunsurile sunt în ordinea în care literele se găsesc în alfabet).&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;4 ≤ n &amp;lt; 200 001&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Fiecare dintre numerele din datele de intrare este un număr natural mai mic decât &amp;lt;code&amp;gt;200 001&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Destinaţia finală a fiecărui transport este una dintre cele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; plantaţii existente.&lt;br /&gt;
* Dacă există litere care nu reprezintă codul tipului unei flori, atunci costul minim de transport pentru acel tip este &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Pentru &amp;lt;code&amp;gt;20%&amp;lt;/code&amp;gt; din teste, &amp;lt;code&amp;gt;n &amp;lt; 1000&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Pentru alte &amp;lt;code&amp;gt;25%&amp;lt;/code&amp;gt; din teste, &amp;lt;code&amp;gt;n &amp;lt; 100 000&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
Intrare&lt;br /&gt;
 4&lt;br /&gt;
 a b a b&lt;br /&gt;
 2 4 4 3&lt;br /&gt;
 1 3 4&lt;br /&gt;
 3 4 2&lt;br /&gt;
 1 2 5&lt;br /&gt;
Ieșire&lt;br /&gt;
 8 33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
import heapq&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def dijkstra(graph, start):&lt;br /&gt;
    n = len(graph)&lt;br /&gt;
    dist = [float(&amp;#039;inf&amp;#039;)] * n&lt;br /&gt;
    dist[start] = 0&lt;br /&gt;
    pq = [(0, start)]  # Priority queue of tuples (distance, vertex)&lt;br /&gt;
&lt;br /&gt;
    while pq:&lt;br /&gt;
        d, u = heapq.heappop(pq)&lt;br /&gt;
        if d &amp;gt; dist[u]:&lt;br /&gt;
            continue&lt;br /&gt;
        for v, w in graph[u]:&lt;br /&gt;
            if dist[u] + w &amp;lt; dist[v]:&lt;br /&gt;
                dist[v] = dist[u] + w&lt;br /&gt;
                heapq.heappush(pq, (dist[v], v))&lt;br /&gt;
&lt;br /&gt;
    return dist&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def calculate_transport_cost(types, quantities, distances):&lt;br /&gt;
    n = len(types)&lt;br /&gt;
    types_cost = [0] * 26&lt;br /&gt;
&lt;br /&gt;
    for t in range(26):&lt;br /&gt;
        nodes = {i for i in range(n) if ord(types[i]) - ord(&amp;#039;a&amp;#039;) == t}&lt;br /&gt;
        if not nodes:&lt;br /&gt;
            continue&lt;br /&gt;
&lt;br /&gt;
        dist = dijkstra(distances, next(iter(nodes)))  # Selectăm primul nod din set&lt;br /&gt;
        for i in range(n):&lt;br /&gt;
            if ord(types[i]) - ord(&amp;#039;a&amp;#039;) == t:&lt;br /&gt;
                types_cost[t] += quantities[i] * dist[i]&lt;br /&gt;
&lt;br /&gt;
    return types_cost&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
n = int(input())&lt;br /&gt;
types = input().split()&lt;br /&gt;
quantities = list(map(int, input().split()))&lt;br /&gt;
&lt;br /&gt;
distances = [[] for _ in range(n)]&lt;br /&gt;
for _ in range(n - 1):&lt;br /&gt;
    x, y, d = map(int, input().split())&lt;br /&gt;
    distances[x - 1].append((y - 1, d))&lt;br /&gt;
    distances[y - 1].append((x - 1, d))&lt;br /&gt;
&lt;br /&gt;
result = calculate_transport_cost(types, quantities, distances)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print(*result)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Danciu</name></author>
	</entry>
</feed>