Cod sursa(job #583637)

Utilizator paul_gabryelPaul Buda paul_gabryel Data 21 aprilie 2011 15:21:36
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb

#include <cstdio>
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

#define N 1<<15
#define pb push_back
#define mp make_pair
#define f first
#define s second

int cs[N];
vector< pair < int , int > >  v[N];

int main ()
{

    ifstream in ("sate.in");
    freopen ("sate.out","w",stdout);
    int n,m,x,y;
    in>>n>>m>>x>>y;
    if(x==y)
        printf("0\n");
    else{
    for(int i,j,c;m;--m){
        in>>i>>j>>c;
        v[i].pb(mp(j,c));
        v[j].pb(mp(i,-c));
    }
    cs[x]=1;
    queue<int> q;
    for(q.push(x);q.size();q.pop()){
        for(vector<pair<int,int> >::iterator i=v[q.front()].begin();i<v[q.front()].end();++i)
            if(!cs[(*i).f]){
                cs[(*i).f]=cs[q.front()]+(*i).s;
                if((*i).f==y){
                    printf("%d\n",cs[y]-1);
                    return 0;
                }
                q.push((*i).f);
            }
    }
    }
return 0;}