Cod sursa(job #76738)

Utilizator coderninuHasna Robert coderninu Data 11 august 2007 02:14:03
Problema Sate Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.61 kb
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#define infile "sate.in"
#define outfile "sate.out"
#define nmax 30001

using namespace std;

vector <int> c2;

int n, *v[nmax], *c[nmax], x, y, i;
long m, *dist;

void readdata()
{
 FILE *fin=fopen(infile, "r");
 int x2, y2;
 long c2;
 fscanf(fin, "%d %ld %d %d\n", &n, &m, &x, &y);
 for (i=1; i<=n; i++)
     {
      v[i]=(int *)realloc(v[i], sizeof(int));
      v[i][0]=0;
      c[i]=(int *)realloc(c[i], sizeof(int));
      c[i][0]=0;
     }
 for (i=0; i<m; i++)
     {
      fscanf(fin, "%d %d %ld\n", &x2, &y2, &c2);
      v[x2][0]++;
      v[x2]=(int *)realloc(v[x2], (v[x2][0]+1)*sizeof(int));
      v[x2][v[x2][0]]=y2;
      c[x2][0]++;
      c[x2]=(int *)realloc(c[x2], (c[x2][0]+1)*sizeof(int));
      c[x2][c[x2][0]]=c2;
      v[y2][0]++;
      v[y2]=(int *)realloc(v[y2], (v[y2][0]+1)*sizeof(int));
      v[y2][v[y2][0]]=x2;
      c[y2][0]++;
      c[y2]=(int *)realloc(c[y2], (c[y2][0]+1)*sizeof(int));
      c[y2][c[y2][0]]=c2;
     }
}

void solve(int x)
{
 int u, p;
 c2.push_back(x);
 dist=(long *)calloc(n+2, sizeof(long));
 p=u=0;
 while (p<=u)
	  {
	   x=c2[p++];
	   for (i=1; i<=v[x][0]; i++)
	       if (!dist[v[x][i]])
		   {
		    c2.push_back(v[x][i]);
		    if (x<v[x][i])
			dist[v[x][i]]=dist[x]+c[x][i];
		    else
			dist[v[x][i]]=dist[x]-c[x][i];
		    if (dist[y]) return;
		   }
	  }
}

void writedata()
{
 FILE *fout=fopen(outfile, "w");
 fprintf(fout, "%ld", dist[y]>0?dist[y]:-dist[y]);
 fclose(fout);
}

int main()
{
 readdata();
 solve(x);
 writedata();
 return 0;
}