Cod sursa(job #595206)

Utilizator SpiderManSimoiu Robert SpiderMan Data 11 iunie 2011 15:15:07
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
# include <cstdio>
# include <vector>
# include <queue>
using namespace std;

# define x first
# define y second

typedef vector < pair <int , int> > VC ;
const char *FIN = "sate.in", *FOU = "sate.out";
const int MAX = 30005;

int N, M, X, Y, A[MAX];
VC G[MAX];
queue <int> Q;

int main (void) {
    freopen (FIN, "r", stdin) ;

    scanf ("%d %d %d %d", &N, &M, &X, &Y);
    for (int i, j, D; M ; --M) {
        scanf ("%d %d %d", &i, &j, &D) ;
        G[i].push_back (make_pair (j, +D));
        G[j].push_back (make_pair (i, -D));
    }
    A[X] = 1;
    for (Q.push (X); !Q.empty (); Q.pop ()) {
        int Z = Q.front ();
        for (VC :: iterator it = G[Z].begin (); it != G[Z].end (); ++it) {
            if (A[it -> x] == 0) {
                A[it -> x] = A[Z] + it -> y;
                if (it -> x == Y) {
                    fprintf (fopen (FOU, "w"), "%d", --A[Y]);
                    return 0;
                }
                Q.push (it -> x);
            }
        }
    }
}