Cod sursa(job #232579)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 15 decembrie 2008 19:49:27
Problema Sate Scor 65
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <stdio.h>

using namespace std;

int n,m,s,p;

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

int viz[30100],S,ok;

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)
{
     if (ok)
          return ;
     if (x==s)
     {
          printf("%d\n",S);
          ok=1;
          return ;
     }
     viz[x]=1;
     for (nod *i=sir[x];i;i=i->urm)
     {
          if (!viz[i->inf])
          {
              // viz[i->inf]=1;
               if (i->inf>x)
               {
                    S+=i->sum;
                    cauta(i->inf);
                    S-=i->sum;

               }
               else
               {
                    S-=i->sum;
                    cauta(i->inf);
                    S+=i->sum;
               }
          }
     }
     viz[x]=0;
}

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;
}