Cod sursa(job #1023923)

Utilizator caliuxSegarceanu Calin caliux Data 7 noiembrie 2013 21:33:25
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <stdio.h>
#include <string.h>
#include <vector>
#include <queue>
#define NMAX 30005
using namespace std;

int N, M, X, Y;
int i, j, nr, curent, curent2, cost[NMAX], s;
bool vizitat[NMAX];
//N varfuri si M arce
struct sat{
    int vf, D;
} a, b;

vector <sat> vf[NMAX];
queue <int> coada;

void bfs(){
    vizitat[X] = 1;
    coada.push(X);
    while(!coada.empty()){
        curent = coada.front();
        coada.pop();
        for(j = 0; j < vf[curent].size(); j++){
            a = vf[curent][j];
            if(!vizitat[a.vf]){
                vizitat[a.vf] = 1;
                coada.push(a.vf);
                cost[a.vf] = cost[curent] + a.D;
                if(a.vf == Y){
                    return;
                }
            }
        }
    }
}

int main(){

    freopen("sate.in", "r", stdin);
    freopen("sate.out", "w", stdout);

    scanf("%d%d%d%d", &N, &M, &X, &Y);

    int x, y, d;

    for(i = 1; i <= M; i++){
        scanf("%d%d%d", &x, &y, &d);
        a.vf = y;
        a.D = d;
        vf[x].push_back(a);//(sat){y,d}
        vf[y].push_back((sat){x, -d});
    }
    bfs();
    printf("%d", cost[Y]);
}