Cod sursa(job #1347701)

Utilizator cipriancxFMI - gr143 Timofte Ciprian cipriancx Data 19 februarie 2015 09:32:47
Problema Sate Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 1.5 kb
#include <iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;

int n,m,x,y,tata[2][31000],coada[31000],dimc,startc,viz[31000];



struct nod
{
    int nr;
    struct nod *urm=NULL;
    int d;
};

struct nod *v[31000];
void introd(int start, int nod, int dist)
{
    struct nod *p;
    p=v[start];
    if(v[start]==NULL)
    {
       p=(struct nod*)malloc(sizeof(struct nod));
       p->urm=NULL;
       p->d=dist;
       p->nr=nod;
       v[start]=p;
    }
    else{

p=(struct nod*)malloc(sizeof(struct nod));
p->urm=v[start];
v[start]=p;
p->nr=nod;
p->d=dist;
    }
}

void bf(int nd)
{

    viz[nd]=1;

   if(v[nd]){
     struct nod *p;


    for(p=v[nd]; p; p=p->urm)
    {
        if(viz[p->nr]==0){ viz[p->nr]=1;
                           dimc++; coada[dimc]=p->nr;
                           tata[0][p->nr]=nd;
                           tata[1][p->nr]=p->d;

                           }
    }
         startc++;
         if(startc<=dimc)bf(coada[startc]);


   }

}



int main()
{
    freopen("sate.in","r",stdin);
   freopen("sate.out","w",stdout);
    scanf("%d %d %d %d",&n,&m,&x,&y);


int aa,bb,cc;
for(int i=1; i<=m; i++)
{
    scanf("%d %d %d",&aa,&bb,&cc);
    introd(aa,bb,cc);
    introd(bb,aa,cc);

}

bf(x);


int st=y;
int dis=0;
while(st!=x)
{
    if(tata[0][st]<st){dis+=tata[1][st]; st=tata[0][st];  }
    else{ dis-=tata[1][st]; st=tata[0][st];   }
}

cout<<dis;

    return 0;
}