Pagini recente » Cod sursa (job #2227660) | Cod sursa (job #2022838) | Cod sursa (job #2868351) | Cod sursa (job #1549455) | Cod sursa (job #68818)
Cod sursa(job #68818)
#include <stdio.h>
#include <stdlib.h>
#define infile "sate.in"
#define outfile "sate.out"
#define nmax 30000
int n, *v[nmax], x, y, i, c2[2][nmax];
long m, *c[nmax], dist[nmax];
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]=(long *)realloc(c[i], sizeof(long));
c[i][0]=0;
}
for (i=0; i<m; i++)
{
fscanf(fin, "%d %d %d\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]=(long *)realloc(c[x2], (c[x2][0]+1)*sizeof(long));
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]=(long *)realloc(c[y2], (c[y2][0]+1)*sizeof(long));
c[y2][c[y2][0]]=c2;
}
}
void solve(int x)
{
int k=1, u2=1, u=0, p=0;
c2[0][u2]=x;
dist=(long *)realloc(dist, (n+1)*sizeof(long));
for (i=1; i<=n; i++) dist[i]=0;
while (u2)
{
u=u2;
p=1;
k=1-k;
u2=0;
while (p<=u)
{
x=c2[k][p++];
for (i=1; i<=v[x][0]; i++)
if (!dist[v[x][i]])
{
c2[1-k][++u2]=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;
}