Cod sursa(job #2966991)

Utilizator dobreraduDobre Radu Fabian dobreradu Data 18 ianuarie 2023 20:54:09
Problema Sate Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <bits/stdc++.h>
using namespace std;

ifstream in("sate.in");
ofstream out("sate.out");

const int NMAX = 30001;
const int INF = 2000000001;
struct edge{
    int next, cost;
};
vector <edge> v[NMAX];
int n, m, start, finish, a, b, cost, dist[NMAX];

void bfs(){
    queue <int> q;
    q.push(start);
    while( !q.empty() ){
        int nod = q.front();
        q.pop();
        if( nod == finish )
            break;
        for(auto capat : v[nod]){
            if( dist[capat.next] == INF ){
                q.push( capat.next );
                if( nod > capat.next )
                    dist[capat.next] = dist[nod] - capat.cost;
                else
                    dist[capat.next] = dist[nod] + capat.cost;
            }
        }
    }
    out << dist[finish];
}

int main()
{
    in >> n >> m >> start >> finish;
    for( int i = 0 ; i < m ; i++ ){
        in >> a >> b >> cost;
        v[a].push_back({b, cost});
        v[b].push_back({a, cost});
    }
    for( int i = 1 ; i <= n ; i++ )
        if( i != start )
            dist[i] = INF;
    bfs();
    return 0;
}