Cod sursa(job #920650)

Utilizator cbanu96Banu Cristian cbanu96 Data 20 martie 2013 16:10:47
Problema Sate Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <cstdio>

#define FILEIN "sate.in"
#define FILEOUT "sate.out"
#define NMAX 30001
#define INF 0x3f3f3f3f

using namespace std;
int n, m, i, j, x, y, d, a, b, p, u, start;
int A[NMAX][NMAX];
int Dm[NMAX];
int Q[NMAX];

void bfs ( int node )
{
    Dm[node] = 0;
    p = u = 1;
    Q[p] = node;
    while ( p <= u)
    {
        start = Q[p++];
        for ( i = 1; i <= n; i++)
        {
            if(Dm[i] > Dm[start] + A[start][i])
            {
                Dm[i] = Dm[start] + A[start][i];
                u++;
                Q[u] = i;
            }
        }
    }
}


int main()
{
    freopen(FILEIN,"r",stdin);
    freopen(FILEOUT,"w",stdout);
    scanf("%d %d %d %d", &n, &m, &x, &y);
    for ( i = 1; i <= n; i++)
        Dm[i] = INF;
    for ( i = 1; i <= m; i++)
    {
        scanf("%d %d %d", &a, &b, &d);
        A[a][b] = d;
        A[b][a] = -d;
    }
    for ( i = 1; i <= n; i++)
        for ( j = 1; j <= n; j++)
            if(A[i][j] == 0 && i != j)
                A[i][j] = INF;
    bfs(x);
    printf("%d\n", Dm[y]);
    return 0;
}