Cod sursa(job #920671)

Utilizator cbanu96Banu Cristian cbanu96 Data 20 martie 2013 16:20:13
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <cstdio>
#include <vector>

#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,next,dist;
vector<pair<int, int> > A[NMAX];
int Dm[NMAX];
int Q[NMAX];

void bfs ( int node )
{
    Dm[node] = 0;
    p = u = 1;
    Q[p] = node;
    while ( p <= u)
    {
        if(Dm[y] != INF)
            break;
        start = Q[p++];
        for ( i = 0; i < A[start].size(); i++)
        {
            next = A[start][i].first;
            dist = A[start][i].second;
            if(Dm[next] > Dm[start] + dist)
            {
                Dm[next] = Dm[start] + dist;
                u++;
                Q[u] = next;
            }
        }
    }
}


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].push_back(make_pair(b,d));
        A[b].push_back(make_pair(a,-d));
    }
    bfs(x);
    printf("%d\n", Dm[y]);
    return 0;
}