Cod sursa(job #73980)

Utilizator astronomyAirinei Adrian astronomy Data 23 iulie 2007 11:35:27
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <stdio.h>
#include <vector>
using namespace std;

#define MAX_N 30100
#define pb push_back

int N, M, X, Y, Q[MAX_N], D[MAX_N], viz[MAX_N];
vector<int> G[MAX_N], R[MAX_N];

void solve(void)
{
    int inc, sf, i, y, x;

    Q[inc = sf = 0] = X, viz[X] = 1;

    while(inc <= sf)
    {
        x = Q[inc++];
        for(i = 0; i < G[x].size(); i++)
        {
            y = G[x][i];
            if(!viz[y])
                viz[y] = 1, Q[++sf] = y, D[y] = D[x] + R[x][i]*(x<y?1:-1);
        }
    }
}

void read_data(void)
{
    int i, a, b, c;

    scanf("%d %d %d %d\n", &N, &M, &X, &Y);

    for(i = 1; i <= M; i++)
    {
        scanf("%d %d %d\n", &a, &b, &c);
        G[a].pb(b), G[b].pb(a), R[a].pb(c), R[b].pb(c);
    }
}

void write_data(void)
{
    printf("%d\n", D[Y]);
}

int main(void)
{
    freopen("sate.in", "rt", stdin);
    freopen("sate.out", "wt", stdout);

    read_data();
    solve();
    write_data();

    return 0;
}