Cod sursa(job #232583)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 15 decembrie 2008 20:08:58
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <stdio.h>
#include <stdlib.h>

using namespace std;

int n,m,s,p;

struct nod
{
     int inf,sum;
     nod *urm;
}*sir[30010];

int viz[30100],S,ok,coada[30100],dist[30100];

void baga(int a,int b,int c)
{
     nod * q=new nod;
     q->inf=a;
     q->sum=b;
     q->urm=sir[c];
     sir[c]=q;
}

void citire()
{
     int a,b,c;
     for (int i=0;i<m;i++)
     {
          scanf("%d %d %d",&a,&b,&c);
          baga(a,c,b);
          baga(b,c,a);
     }
}

void cauta(int x)
{

     coada[0]=x;
     int nr=1;
     int dd=0;
     while (!dist[s])
     {
               viz[coada[dd]]=1;
               for (nod *i=sir[coada[dd]];i;i=i->urm)
               {
                    if (viz[i->inf]==0)
                    {
                         if (i->inf>coada[dd])
                              dist[i->inf]=dist[coada[dd]]+i->sum;
                         else
                              dist[i->inf]=dist[coada[dd]]-i->sum;
                              viz[i->inf]=1;
                         coada[nr++]=i->inf;
                    }
               }
          dd++;
     }
     printf("%d\n",dist[s]);
}

int main ()
{
     freopen ("sate.in","r",stdin);
     freopen ("sate.out","w",stdout);
     scanf ("%d %d %d %d",&n,&m,&p,&s);
     citire();
     cauta(p);
     return 0;
}