Cod sursa(job #1502940)

Utilizator DobosDobos Paul Dobos Data 15 octombrie 2015 11:47:55
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <bits/stdc++.h>

using namespace std;

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

const int MAX = 30005;
const int MOD = 25;
int poz  = MOD - 1;
char buffer[MOD];
vector < pair <int ,int > > G[MAX];
deque < int > lx;
int D[MAX];
inline void parsare(int &x){
    while(!isdigit(buffer[poz])){
        poz ++;
        if(poz == MOD){
            poz = 0;
            fin.read(buffer,MOD);
        }
    }
    x = 0;
    while(isdigit(buffer[poz])){
        x = x * 10 + (buffer[poz] - '0');
        poz ++;
        if(poz == MOD){
            poz = 0;
            fin.read(buffer,MOD);
        }
    }

}

inline void bfs( )
{
    int x;
    while(!lx.empty()){
        x = lx.front();
        lx.pop_front();
        for(int i = 0; i < G[x].size(); i ++){
            if(D[G[x][i].first] ==  0){
                D[G[x][i].first] = D[x] + G[x][i].second;
                lx.push_back(G[x][i].first);
            }
        }
    }
}
int main()
{
    int n,m,s,f,x,y,d;
    parsare(n); parsare(m); parsare(s); parsare(f);
    for(int i = 0 ; i < m; i ++){
        parsare(x); parsare(y); parsare(d);
        G[x].push_back(make_pair(y,d));
        G[y].push_back(make_pair(x,-d));
    }
    lx.push_back(s);
    bfs();
    fout << D[f] ;

    return 0;
}