Cod sursa(job #864638)

Utilizator AlexandruValeanuAlexandru Valeanu AlexandruValeanu Data 25 ianuarie 2013 15:33:45
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <cstdio>
#include <vector>
#include <queue>

using namespace std;

typedef struct{

    int vecin;
    int cost;

} nod;

vector < vector <nod> > Graf;
vector <int> dist;
//queue <int> Q;

int N, M;
int inceput, sfarsit;
int a, b, c;

int coada[30001];
int inc, sfc;

void citire(){

    freopen("sate.in", "r", stdin);

    scanf("%d %d %d %d", &N, &M, &inceput, &sfarsit);

    Graf.resize(N+1);

    for(; M; M--){

        scanf("%d %d %d", &a, &b, &c);

        nod x = {b, c};
        nod y = {a, -c};

        Graf[a].push_back(x);
        Graf[b].push_back(y);
    }
}

void dijkstra(){

    dist.resize(N+1);
    //Q.push(inceput);

    coada[1] = inceput;
    inc = sfc = 1;

    while(inc <= sfc){

        int current = coada[inc];
        inc++;
        //Q.pop();

        vector <nod> ::iterator it;

        for(it = Graf[current].begin(); it != Graf[current].end(); ++it){

            if(dist[it->vecin] == 0){

                dist[it->vecin] = dist[current] + it->cost;

                if(it->vecin == sfarsit)
                    return;

                //Q.push(it->vecin);
                coada[++sfc] = it->vecin;
            }
        }
    }
}

void afis(){

    freopen("sate.out", "w", stdout);

    printf("%d\n", dist[sfarsit]);

}

int main(){

    citire();
    dijkstra();
    afis();

    return 0;
}