Cod sursa(job #1701888)

Utilizator antanaAntonia Boca antana Data 14 mai 2016 12:35:21
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <cstdio>
#define MAX 30000
#define MAXM 100024
using namespace std;
int n, m, lista[MAX+1], val[2*MAXM+1], next[2*MAXM+1], d[2*MAXM+1], viz[MAX+1], dist[MAX+1], k;
int coada[MAX+1];
void adauga(int x, int y, int D)
{
    int p=lista[x];
    while(p)
        p=next[p];
    k++;
    val[k]=y;
    d[k]=D;
    next[k]=lista[x];
    lista[x]=k;
}
void bfs(int nod)
{
    int st, dr, p;
    st=dr=1;
    viz[nod]=1;
    coada[st]=nod;
    while(st<=dr)
    {
        p=lista[coada[st]];
        while(p)
        {
            if(viz[val[p]]==0)
            {
                viz[val[p]]=1;
                coada[++dr]=val[p];
                dist[val[p]]=dist[coada[st]]+d[p];
            }
            p=next[p];
        }
        st++;
    }
}
int main()
{
    freopen("sate.in", "r", stdin);
    freopen("sate.out", "w", stdout);
    int i, a,b, x, y, D;
    scanf("%d%d%d%d", &n, &m, &a, &b);
    for(i=1;i<=m;i++)
    {
        scanf("%d%d%d", &x, &y, &D);
        adauga(x, y, D);
        adauga(y, x, -1*D);
    }
    bfs(a);
    printf("%d", dist[b]);
    return 0;
}