Cod sursa(job #3372699)

Utilizator T16SanSandulescu T16San Data 4 noiembrie 2026 18:53:13
Problema Sate Scor 0
Compilator py Status done
Runda Arhiva de probleme Marime 1.63 kb
from collections import deque

infile = open("sate.in", "r")
outfile = open("sate.out", "w")

line = infile.readline()

nr_sate, nr_relatii, sat_start, sat_end = line.strip().split()

adj_list = {}
parents = {}
visited = set()


def calculate_distance(start, end, parents):
    distance = 0
    parent, weight = parents[end]
    if parent < end:
        distance += int(weight)
    else:
        distance -= int(weight)
    end = parent

    while start != end:
        parent, weight = parents[end]
        if parent < end:
            distance += int(weight)
        else:
            distance -= int(weight)
        end = parent
    return distance ##case if the nodes are neighbours


def bfs(adj_list):
    queue = deque()
    queue.append(sat_start)

    while len(queue) != 0:
        node = queue.popleft()
        for (neighbour, weight) in adj_list[node]:
            if neighbour not in visited:
                parents[neighbour] = (node, weight)
                queue.append(neighbour)
            visited.add(node)

line = infile.readline()
while line:
    node1, node2, weight = line.strip().split()

    if node1 not in adj_list:
        adj_list[node1] = []
        adj_list[node1].append((node2, weight))
    else:
        adj_list[node1].append((node2, weight))

    if node2 not in adj_list:
        adj_list[node2] = []
        adj_list[node2].append((node1, weight))
    else:
        adj_list[node2].append((node1, weight))

    line = infile.readline()

##print(adj_list)

bfs(adj_list)
##print(parents)
distance = calculate_distance(sat_start, sat_end, parents)

outfile.write(str(distance))
##print(distance)

infile.close()
outfile.close()