Cod sursa(job #1711581)

Utilizator karate3Gabriela Tudor karate3 Data 31 mai 2016 18:44:40
Problema Sate Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.6 kb
#include <iostream>
#include <fstream>

using namespace std;

struct element{
    int info;
    int nrKilometri;
    element *next;
};

element *noduri[30025];
long v[30025];

void adauga(int a, int b, int d){
    element *p = new element;
    p -> info = b;
    p -> nrKilometri = d;
    p -> next = noduri[a];
    noduri[a] = p;
}


int main(){
    ifstream fin("sate.in");
    ofstream fout("sate.out");

    int n, m, x, y;
    int a, b, D;

    fin >> n >> m >> x >> y;

    for(int i = 1; i <= m; i ++){
        fin >> a >> b >> D;
        adauga(a, b, D);
        adauga(b, a, D);
    }

    element *stg, *dr;
    stg = new element;
    stg -> info = x;
    stg -> nrKilometri = 0;
    v[x] = 1;
    stg -> next = NULL;
    dr = stg;

    int sem = 0;
    while(stg && !sem){
        int aux = stg -> info;
        for(element *p = noduri[aux]; p; p = p -> next){
            if(v[p -> info] == 0){
                element *T = new element;
                T -> info = p -> info;
                T -> next = NULL;
                if(aux < p -> info){
                    v[p -> info] = v[aux] + p -> nrKilometri;
                }
                else{
                    v[p -> info] = v[aux] - p -> nrKilometri;
                }
                if(p -> info == y){
                    sem = 1;
                }
                dr -> next = T;

                dr = T;
            }
            element *U = new element;
            U = stg;
            stg = stg -> next;
            delete U;
        }
    }

    fout << v[y] - 1;

    return 0;
}