Cod sursa(job #2586611)

Utilizator lamuritorulIoan Pop lamuritorul Data 21 martie 2020 11:41:08
Problema Sate Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

void bfs(int n, int sursa, vector<vector<pair<int, int>>> & graf, vector<int> & distante, vector<bool> & vizitat, int destinatia)
{
    int i;
    queue<int> coada;
    coada.push(sursa);
    vizitat[sursa] = true;
    int s;
    while (!coada.empty())
    {
        s = coada.front();
        coada.pop();
        for (i = 0; i < graf[s].size(); i++)
            if (!vizitat[graf[s][i].first])
            {
                distante[graf[s][i].first] = distante[s] + graf[s][i].second;
                vizitat[graf[s][i].first] = true;
                coada.push(graf[s][i].first);
                if (vizitat[destinatia])
                    return;
            }
    }
}

int main()
{
    int n, satX, satY;
    ifstream fin("sate.in");
    int m, aux, d;
    fin >> n >> m >> satX >> satY;
    satX--;
    satY--;
    int x, y;
    vector<vector<pair<int, int>>> graf(n);
    vector<int> distante(n);
    vector<bool> vizitat(n);
    for (int i = 0; i < m; i++)
    {
        fin >> x >> y >> d;
        x--;
        y--;
        if (x > y)
        {
            aux = x;
            x = y;
            y = aux;
        }
        graf[x].emplace_back(y, d);
        graf[y].emplace_back(x, -d);
    }
    fin.close();
    bfs(n, satX, graf, distante, vizitat, satY);
    ofstream fout("sate.out");
    fout << distante[satY];
    fout.close();
    return 0;
}