Cod sursa(job #1518007)

Utilizator CalinSpiridonSpiridon Calin CalinSpiridon Data 5 noiembrie 2015 10:24:00
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <fstream>
#include <vector>
#include <queue>
#include <bitset>
using namespace std;

#define maxd 30010

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

int n, m, x, y, u, v, dist, t;
vector <int> a[maxd];
vector <int> d[maxd];
queue <int> c;
int lg[maxd];
bitset <maxd> viz;
char cp[30]; //citire parsata

int main(){
    fin>>n>>m>>x>>y;
    fin.get();
    for(;m;--m){
        u=v=dist=0;
        int k=0;
        fin.getline(cp, 25);
        while(cp[k]!=' '){
            u=u*10+(cp[k]-'0');
            k++;
        }
        k++;
        while(cp[k]!=' '){
            v=v*10+(cp[k]-'0');
            k++;
        }
        k++;
        while(cp[k]!=0){
            dist=dist*10+(cp[k]-'0');
            k++;
        }
        a[u].push_back(v);
        a[v].push_back(u);
        d[u].push_back(dist);
        d[v].push_back(-dist);
    }
    c.push(x);
    viz[x]=true;
    int ok=1;
    while(c.size() && ok){
        t=c.front();
        c.pop();
        if(t==y) ok=0;
        for(int i=0;i<a[t].size();++i){
            int g=a[t][i];
            if(!viz[g]){
                viz[g]=true;
                lg[g]=lg[t]+d[t][i];
                c.push(g);
            }
        }
    }
    fout<<lg[y];



    return 0;
}