Cod sursa(job #2857793)

Utilizator teodorescunicolasteodorescu nicolas alexandru teodorescunicolas Data 26 februarie 2022 12:42:54
Problema Sate Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <stdio.h>
#include <vector>
#include <queue>

#define NMAXX 30000

using namespace std;

struct costuri {
    int edge, cost;
};

vector <costuri> graf[NMAXX + 1];
queue <int> bfsQueue;
int dist[NMAXX + 1];

void bfs( int node ) {
    int qf;

    bfsQueue.push( node );
    dist[node] = 1;

    while ( !bfsQueue.empty() ) {
        qf = bfsQueue.front();
        for ( costuri& val : graf[qf] ) {
            if ( !dist[val.edge] ) {
                bfsQueue.push( val.edge );
                if ( qf < val.edge )
                    dist[val.edge] = dist[qf] + val.cost;
                else
                    dist[val.edge] = dist[qf] - val.cost;
            }
        }

        bfsQueue.pop();
    }
}

int main()
{
    FILE *fin, *fout;
    int n, m, x, y, a, b, d, i;

    fin = fopen( "sate.in", "r" );
    fout = fopen( "sate.out", "w" );

    fscanf( fin, "%d%d%d%d", &n, &m, &x, &y );
    for ( i = 0; i < m; i++ ) {
        fscanf( fin, "%d%d%d", &a, &b, &d );
        graf[a].push_back( {b, d} );
        graf[b].push_back( {a, d} );
    }

    bfs( x );

    fprintf( fout, "%d", dist[y] - 1 );

    return 0;
}