Cod sursa(job #76734)

Utilizator coderninuHasna Robert coderninu Data 11 august 2007 01:58:33
Problema Sate Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <stdio.h>
#include <stdlib.h>
#define infile "sate.in"
#define outfile "sate.out"
#define nmax 30001

int n, *c[nmax], x, y, i, *c2;
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++) c[i]=(int *)calloc(n+1, sizeof(int));
 for (i=0; i<m; i++)
     {
      fscanf(fin, "%d %d %ld\n", &x2, &y2, &c2);
      c[x2][y2]=c[y2][x2]=c2;
     }
}

void solve(int x)
{
 int u, p;
 c2=(int *)calloc(n+1, sizeof(int));
 c2[1]=x;
 dist=(long *)calloc(n+1, sizeof(long));
 p=u=1;
 while (p<=u)
	  {
	   x=c2[p++];
	   for (i=1; i<=n; i++)
	       if (c[x][i] && !dist[i])
		   {
		    c2[++u]=i;
		    if (x<i)
			dist[i]=dist[x]+c[x][i];
		    else
			dist[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;
}