Cod sursa(job #1813632)

Utilizator demetriad-dagpagDavid Demetriad demetriad-dagpag Data 23 noiembrie 2016 09:01:02
Problema Sate Scor 30
Compilator c Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <stdio.h>
#include <stdlib.h>
int nr,lista[30001],nod[100025],next[100025],mark[30001],dist[100025],coada[30001],rez[30001];
void add(int x,int y,int d)
{
    nr++;
    nod[nr]=y;
    dist[nr]=d;
    next[nr]=lista[x];
    lista[x]=nr;
}
int main()
{
    int n,m,x,y,i,a,b,d,p,u;
    freopen("sate.in","r",stdin);
    freopen("sate.out","w",stdout);
    scanf("%d%d%d%d",&n,&m,&x,&y);
    for(i=1; i<=n; i++)
    {
        scanf("%d%d%d",&a,&b,&d);
        if(a>b) d=-d;
        add(a,b,d);
        add(b,a,-d);
    }
    p=u=1;
    coada[1]=x;
    mark[x]=1;
    while(p<=u)
    {
        x=lista[coada[p]];
        while(x)
        {
            if(mark[nod[x]]==0)
            {
                rez[nod[x]]=rez[coada[p]]+dist[x];
                mark[nod[x]]=1;
                coada[++u]=nod[x];
            }
            x=next[x];
        }
        p++;
    }
    printf("%d\n",rez[y]);

    return 0;
}