Cod sursa(job #627165)

Utilizator vendettaSalajan Razvan vendetta Data 29 octombrie 2011 10:48:17
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <fstream>
#include <vector>
#include <queue>
#include <bitset>

using namespace std;

const int nmax = 30011;

int n, m, alfa, beta;//alfa = nodul de pornir; beta = nodul destinatie;
vector<pair<int,int> > gf[nmax];
bitset<nmax> viz;
long d[nmax];
queue<int> q;

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

void citeste(){

    f>>n>>m>>alfa>>beta;
    for(int i=1; i<=m; ++i){
        int x, y, c;
        f>>x>>y>>c;
        gf[x].push_back(make_pair(y,c));
        gf[y].push_back(make_pair(x,-c));
    }

}

void bf(){

    for(int i=1; i<=n; ++i) d[i] = 20000111;

    d[alfa] = 0;

    for(q.push(alfa); q.size(); ){
        int nod = q.front();
        viz[nod] = 0;
        q.pop();
        for(unsigned i = 0; i < gf[nod].size(); ++i){
            int vecin = gf[nod][i].first;
            int cost  = gf[nod][i].second;
            if (d[vecin] > d[nod] + cost){
                d[vecin] = d[nod] + cost;
                if (viz[vecin]==0) {
                    viz[vecin] = 1;
                    q.push(vecin);
                }
            }
        }
    }
}

void scrie(){

    g<<d[beta]<<"\n";

}

int main(){

    citeste();
    bf();
    scrie();

    f.close();
    f.close();

    return 0;

}