Cod sursa(job #1707214)

Utilizator AndreiFlorescuAndrei Florescu AndreiFlorescu Data 24 mai 2016 17:21:26
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

struct cell {
    int vec;
    int cost;
};

vector <cell> graf[30002];
queue <int> coada;
int dist[30002];
bool vizitat[30002];

void bfs() {
    int nodAct;
    int i;

    while (!coada.empty()) {
        nodAct = coada.front();
        coada.pop();
        for (i = 0; i < graf[nodAct].size(); i++) {
            if (vizitat[graf[nodAct][i].vec] == false) {
                if (graf[nodAct][i].vec > nodAct) {
                    dist[graf[nodAct][i].vec] = dist[nodAct] + graf[nodAct][i].cost;
                } else {
                    dist[graf[nodAct][i].vec] = dist[nodAct] - graf[nodAct][i].cost;
                }
                coada.push(graf[nodAct][i].vec);
                vizitat[graf[nodAct][i].vec] = true;
            }
        }
    }
}

int main() {
    ifstream file_in ("sate.in");
    ofstream file_out ("sate.out");

    int n, m, x, y, u, v, d;
    int i;

    // Citirea datelor
    file_in >> n >> m >> x >> y;

    for (i = 0; i < m; i++) {
        file_in >> u >> v >> d;
        graf[u].push_back((cell){v, d});
        graf[v].push_back((cell){u, d});
    }

    // Calcularea solutiei
    coada.push(x);
    dist[x] = 0;
    vizitat[x] = 1;
    bfs();

    // Afisarea solutiei
    file_out << dist[y];

    return 0;
}