Cod sursa(job #2741745)

Utilizator dancu_mihai13Dancu Mihai dancu_mihai13 Data 18 aprilie 2021 17:01:21
Problema Sate Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <fstream>
#include <vector>
#include <queue>
 
using namespace std;
 
ifstream fin  ("sate.in");
ofstream fout ("sate.out");

const int NMAX = 30005;

int N, M, x, y;
bool vizitat[NMAX]; int dist[NMAX];
vector < vector < pair < int, int > > > edges(NMAX);

void read()
{
    fin >> N >> M >> x >> y;
    int a, b, c;
    for(int i = 0; i < M; i++)
    {
        fin >> a >> b >> c;
        edges[a].push_back({b, c});
        edges[b].push_back({a, c});
    }
}

void BFS(int nod)
{
    queue < int > coada;
    coada.push(nod);
    vizitat[nod] = true;
    
    while(!coada.empty())
    {
        int next = coada.front();
        coada.pop();
        vizitat[next] = true;
        for(unsigned int i = 0; i < edges[next].size(); i++)
        {
            int vecin = edges[next][i].first;
            int cost = edges[next][i].second;
            
            if(!vizitat[vecin])
            {
                dist[vecin] = dist[next] + pow(-1, (vecin < next)) * cost;
                coada.push(vecin);
            }
        }
    }
}

int main()
{
    read();
    BFS(x);
    fout << dist[y] << '\n';
    return 0;
}