Cod sursa(job #68091)

Utilizator info_arrandrei gigea info_arr Data 26 iunie 2007 14:02:13
Problema Sate Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
using namespace std;

#define MAX_N 30005
#define MAX_V 300

#include <stdio.h>
#include <fstream>

FILE *fin=fopen("sate.in","r"),
     *fout=fopen("sate.out","w");
     
typedef struct 
 {
   int v;
   int c;
 } lista;
 
lista p[MAX_N][MAX_V];
int el[MAX_N];
int v[MAX_N];
int d[MAX_N];
int coada[MAX_N<<1];     
int n,m,x,y;

void buildgraf (void)
{
  int i,x0,y0,d;
  memset(el,0,sizeof(el));
  fscanf(fin,"%d %d %d %d",&n,&m,&x,&y);
  for (i=1; i<=m; i++) {
   fscanf(fin,"%d %d %d",&x0,&y0,&d);
   el[x0]++; el[y0]++;
   p[x0][el[x0]].v=y0; p[x0][el[x0]].c=d;
   p[y0][el[y0]].v=x0; p[y0][el[y0]].c=-d;
}  }
   
void bf ()
{
  int i,li=1,lf=1,vf;
  memset(v,0,sizeof(v));
  memset(d,0,sizeof(d));
  v[x]=1; coada[lf++]=x;
  while (li!=lf)
   {
     vf=coada[li++]; v[vf]=1;
     for (i=1; i<=el[vf]; i++)
      if (v[p[vf][i].v]==0) 
       {
         coada[lf++]=p[vf][i].v;
         v[p[vf][i].v]=1;
         d[p[vf][i].v]=d[vf]+p[vf][i].c;
       }
   }
  fprintf(fout,"%d\n",d[y]);
} 

int main()
{
  buildgraf();

  bf();
  
  fclose(fin);
  fclose(fout);
  
  return 0;
}