<?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=0591_-_Firma</id>
	<title>0591 - Firma - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=0591_-_Firma"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0591_-_Firma&amp;action=history"/>
	<updated>2026-05-01T05:39:26Z</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=0591_-_Firma&amp;diff=9830&amp;oldid=prev</id>
		<title>Oros Ioana Diana: Pagină nouă: = Cerința = Într-o țară sunt &lt;code&gt;n&lt;/code&gt; orașe, numerotate de la &lt;code&gt;1&lt;/code&gt; la &lt;code&gt;n&lt;/code&gt;, unite între ele prin &lt;code&gt;m&lt;/code&gt; șosele bidirecționale de lungimi cunoscute, între oricare două orașe existând drum, fie șosea directă, fie prin alte orașe. O firmă dorește să-și stabilească sediul în unul dintre orașe, astfel încât suma lungimilor drumurilor minime de la orașul în care se află sediul la toate celelaltele orașe să fie minimă....</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0591_-_Firma&amp;diff=9830&amp;oldid=prev"/>
		<updated>2024-05-18T20:24:46Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: = Cerința = Într-o țară sunt &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; orașe, numerotate de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, unite între ele prin &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; șosele bidirecționale de lungimi cunoscute, între oricare două orașe existând drum, fie șosea directă, fie prin alte orașe. O firmă dorește să-și stabilească sediul în unul dintre orașe, astfel încât suma lungimilor drumurilor minime de la orașul în care se află sediul la toate celelaltele orașe să fie minimă....&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;
Într-o țară sunt &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; orașe, numerotate de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, unite între ele prin &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; șosele bidirecționale de lungimi cunoscute, între oricare două orașe existând drum, fie șosea directă, fie prin alte orașe. O firmă dorește să-și stabilească sediul în unul dintre orașe, astfel încât suma lungimilor drumurilor minime de la orașul în care se află sediul la toate celelaltele orașe să fie minimă. Determinați orașul care va fi ales pentru sediul firmei. Dacă sunt mai multe orașe care pot fi alese, se va alege cel cu numărul de ordine mai mic.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;firmaIN.txt&amp;lt;/code&amp;gt; conține pe prima linie numerele &amp;lt;code&amp;gt;n m&amp;lt;/code&amp;gt;, iar următoarele &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; linii câte trei numere &amp;lt;code&amp;gt;i j L&amp;lt;/code&amp;gt;, cu semnificatia: între orașele &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;j&amp;lt;/code&amp;gt; există o șosea directă de lungime &amp;lt;code&amp;gt;L&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fișierul de ieșire &amp;lt;code&amp;gt;firmaOUT.txt&amp;lt;/code&amp;gt; va conține pe prima linie numărul &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;, reprezentând numărul de ordine al orașului care va ales ca sediu pentru firmă.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 100&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
&amp;lt;code&amp;gt;firmaIN.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 6 9&lt;br /&gt;
 1 3 5&lt;br /&gt;
 1 4 5&lt;br /&gt;
 1 5 4&lt;br /&gt;
 2 3 5&lt;br /&gt;
 2 4 1&lt;br /&gt;
 2 5 2&lt;br /&gt;
 3 6 2&lt;br /&gt;
 4 6 4&lt;br /&gt;
 5 6 4&lt;br /&gt;
&amp;lt;code&amp;gt;firmaOUT.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 2&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import heapq&lt;br /&gt;
&lt;br /&gt;
def check_restrictions(n, m):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 100):&lt;br /&gt;
        with open(&amp;quot;firmaOUT.txt&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
            fout.write(&amp;quot;Datele nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def dijkstra(nod, n, G):&lt;br /&gt;
    D = [float(&amp;#039;inf&amp;#039;)] * (n + 1)&lt;br /&gt;
    D[nod] = 0&lt;br /&gt;
    Q = [(0, nod)]&lt;br /&gt;
    while Q:&lt;br /&gt;
        x, y = heapq.heappop(Q)&lt;br /&gt;
        if x &amp;gt; D[y]:&lt;br /&gt;
            continue&lt;br /&gt;
        for nodnou, costnou in G[y]:&lt;br /&gt;
            if D[nodnou] &amp;gt; D[y] + costnou:&lt;br /&gt;
                D[nodnou] = D[y] + costnou&lt;br /&gt;
                heapq.heappush(Q, (D[nodnou], nodnou))&lt;br /&gt;
    return D&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;firmaIN.txt&amp;quot;, &amp;quot;r&amp;quot;) as fin:&lt;br /&gt;
        n, m = map(int, fin.readline().split())&lt;br /&gt;
        &lt;br /&gt;
        if not check_restrictions(n, m):&lt;br /&gt;
            return&lt;br /&gt;
&lt;br /&gt;
        G = [[] for _ in range(n + 1)]&lt;br /&gt;
        for _ in range(m):&lt;br /&gt;
            x, y, w = map(int, fin.readline().split())&lt;br /&gt;
            G[x].append((y, w))&lt;br /&gt;
            G[y].append((x, w))&lt;br /&gt;
&lt;br /&gt;
    minim = float(&amp;#039;inf&amp;#039;)&lt;br /&gt;
    mini = -1&lt;br /&gt;
    for i in range(1, n + 1):&lt;br /&gt;
        s = 0&lt;br /&gt;
        D = dijkstra(i, n, G)&lt;br /&gt;
        for j in range(1, n + 1):&lt;br /&gt;
            if D[j] != float(&amp;#039;inf&amp;#039;):&lt;br /&gt;
                s += D[j]&lt;br /&gt;
&lt;br /&gt;
        if s &amp;lt; minim:&lt;br /&gt;
            minim = s&lt;br /&gt;
            mini = i&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;quot;firmaOUT.txt&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
        fout.write(str(mini))&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Oros Ioana Diana</name></author>
	</entry>
</feed>