Cod sursa(job #2586602)

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

#define NMAX 30000
#define MMAX 100024

using namespace std;

int coada[MMAX];
vector<pair<int, int>> graf[NMAX];
int distante[NMAX];
bool vizitat[NMAX];

void citesteGraf(string fisierIntrare, int & n, int & satX, int & satY)
{
    ifstream fin(fisierIntrare);
    int m, aux, d;
    fin >> n >> m >> satX >> satY;
    satX--;
    satY--;
    int x, y;
    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();
}

void bfs(int n, int sursa)
{
    int i, st = 0, lungime = 1;
    coada[0] = sursa;
    vizitat[sursa] = true;
    int s;
    while (st < lungime)
    {
        s = coada[st];
        st++;
        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[lungime] = graf[s][i].first;
                lungime++;
            }
    }
}

void scrieDistanta(string fisierIesire, int satY)
{
    ofstream fout(fisierIesire);
    fout << distante[satY];
    fout.close();
}

int main()
{
    int n, satX, satY;
    citesteGraf("sate.in", n, satX, satY);
    bfs(n, satX);
    scrieDistanta("sate.out", satY);
    return 0;
}