Cod sursa(job #545229)

Utilizator DanceKrissCristian Oancea DanceKriss Data 2 martie 2011 21:58:30
Problema Sate Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<fstream>
#include<stdlib.h>

using namespace std;

const int LGMAX = int(3e4);
int viz[LGMAX], c[LGMAX], dst[LGMAX],
    n,m,X,Y;
typedef struct nod
    {
        int inf,d;
        nod *urm;
    } TNOD;
TNOD *v[LGMAX],*p;

void add( int a, int b, int ds )
{
    p = new TNOD;
    p->inf = a;
    p->d = ds;
    p->urm = v[b];
    v[b] = p;
}

void citire()
{
    int i,x,y,ds;
    ifstream in("sate.in");
    in>>n>>m>>X>>Y;
    for( i=1; i<=m; i++ )
        {
            in>>x>>y>>ds;
            add( x, y, ds );
            add( y, x, ds );
        }
}

void bfs(int ceva, int altceva)
{
    int i,j;
    j=0;
    c[j++] = ceva;
    viz[ceva] = 1;
    memset(dst,-1,sizeof(dst));
    dst[ceva] = 0;
    for( i=0; i<=j; i++ )
        for( p=v[c[i]]; p; p = p->urm )
            if( !viz[p->inf] )
                {
                    viz[p->inf] = 1;
                    c[j++] = p->inf;
                    if( p->inf<c[i] ) dst[p->inf] = dst[c[i]] - p->d;
                        else    dst[p->inf] = dst[c[i]] + p->d;
                    if( dst[altceva]!=-1 ) return;
                }

}

int main()
{
    freopen("sate.out","w",stdout);
    citire();
    bfs( X,Y );
    cout<<abs(dst[Y])<<endl;
    return 0;
}