Cod sursa(job #1054215)

Utilizator R.A.RFMI Romila Remus Arthur R.A.R Data 13 decembrie 2013 15:08:04
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

ifstream in("sate.in");
ofstream out("sate.out");

const int NMAX = 30001;

vector<pair<int,int> >V[NMAX];

int Dist[NMAX];
bool Queued[NMAX];

int findMinimalPath(int source, int destination){

    int x, y, c;

    for(x = 1; x < NMAX; x++)
        Dist[x] = NMAX;

    queue<int> Q;
    Dist[source] = 0;
    Q.push(source);

    while(!Q.empty()){
        x = Q.front();
        Q.pop();

        for(int i = 0; i < V[x].size(); i++){
            y = V[x][i].first;
            c = V[x][i].second;

            if(Queued[y] == true)
                continue;

            if(x > y)
                c = -c;

            Dist[y] = Dist[x] + c;
            Q.push(y);
            Queued[y] = true;
        }
    }

    return Dist[destination];
}

int main()
{
    int x, y, c, X, Y, M, N;
    in >> N >> M >> X >> Y;

    while(M--){
        in >> x >> y >> c;

        V[x].push_back(make_pair(y,c));
        V[y].push_back(make_pair(x,c));
    }

    out << findMinimalPath(X,Y);

    return 0;
}