Cod sursa(job #674661)

Utilizator MKLOLDragos Ristache MKLOL Data 6 februarie 2012 16:37:58
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<stdio.h>
int N,M,a,b,c,viz[123450],coad[1234560],st,dr,l,f;
struct nod
{
    int val,c;
    nod* next;
} *g[123450];

void add(int x,int y,int c)
{
    nod* a = new nod;
    a->val=y;
    a->c=c;
    a->next=g[x];
    g[x]=a;
}
void make(int x)
{//printf("%d ",x);
    for(nod* a=g[x];a;a=a->next)
    {
        if(!viz[a->val])
        {
            if((a->val)>x)
            {
                viz[a->val]=viz[x]+a->c;

            }
            else
            {
                viz[a->val]=viz[x]-a->c;
            }
            coad[dr++]=a->val;
            //printf("%d %d\n",a->val,viz[a->val]);

        }
    }
}

int main()
{
freopen("sate.in","r",stdin);
freopen("sate.out","w",stdout);
scanf("%d%d%d%d",&N,&M,&f,&l);

for(int i=1;i<=M;++i)
    {
    scanf("%d%d%d",&a,&b,&c);
    add(a,b,c);
    add(b,a,c);
    }
coad[0]=f;


viz[f]=1;
st=0,dr=1;
    while(st<dr)
    {
        make(coad[st]);
        ++st;
    }
    printf("%d\n",viz[l]-1);

}