Pagini recente » Cod sursa (job #2763868) | Cod sursa (job #81771) | Cod sursa (job #1501444) | Cod sursa (job #2818302) | Cod sursa (job #76734)
Cod sursa(job #76734)
#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;
}