Cod sursa(job #3375099)

Utilizator PuternicDezvoltatPuternicSRL PuternicDezvoltat Data 10 noiembrie 2026 12:23:29
Problema Sate Scor 0
Compilator py Status done
Runda Arhiva de probleme Marime 1.34 kb
#https://www.infoarena.ro/problema/sate
#Complexitate:O(N+M) -> Fiecare sat este vizitat doar o data.In  BFS() fiecare nod poate avea in total maxim 2M muchii (din prop grade) deci avem O(N+2M)=O(N+M) 
from collections import deque
N, M,X,Y =0,0,0,0

drum = {}

with open ('sate.in','r')as f:
    linie = f.readline().strip().split()
    N, M,X,Y =int(linie[0]),int(linie[1]),int(linie[2]),int(linie[3])
    # print(N,M,X,Y)
    for i in range(1,N+1):
        drum[i]=[]
    for i in range(M):
        linie = f.readline().strip().split()
        x,y,d = int(linie[0]),int(linie[1]),int(linie[2])
        drum[x].append((int(y),int(d)))
        drum[y].append((int(x),int(-d)))
# print(drum)

coada1= deque([X])
coada2= deque([0])
ok=0
visited = [False]*(N+1)
visited[X] = True
while len(coada1):
    tata = coada1.popleft()
    
    if tata == Y:
        ok=1
        with open('sate.out','w')as g:
            g.write(str(abs(coada2.popleft()))) # posibils a fie X>Y pentru abs
        break
    else:
        lungime_currenta = coada2.popleft()
        for vec,dr in drum[tata]:
            if visited[vec] == False:
                visited[vec] = True
                lungime_currenta += dr
                coada1.append(vec)
                coada2.append(lungime_currenta)
                lungime_currenta -= dr
                visited[vec] = True
if ok==0:print("False")