Pagini recente » Cod sursa (job #77066) | Cod sursa (job #3141444) | Profil raluca_aida | Cod sursa (job #3237145) | Cod sursa (job #67714)
Cod sursa(job #67714)
#include <stdio.h>
#define infile "sate.in"
#define outfile "sate.out"
#define nmax 3000
struct bau {unsigned int ad, dis;} a[nmax][nmax/2];
unsigned int n, x, y, uz[nmax], c[nmax];
long m, i, dist[nmax], rez;
void readdata()
{
FILE *fin=fopen(infile, "r");
long daux;
int x2, y2;
fscanf(fin, "%d %ld %d %d\n", &n, &m, &x, &y);
for (i=0; i<m; i++)
{
fscanf(fin, "%d %d %ld", &x2, &y2, &daux);
a[x2][++a[x2][0].ad].ad=y2;
a[x2][a[x2][0].ad].dis=daux;
a[y2][++a[y2][0].ad].ad=x2;
a[y2][a[y2][0].ad].dis=daux;
}
}
long abs(long x)
{
return x<0?-x:x;
}
long DFS(unsigned int x)
{
int u=0;
c[++u]=x;
uz[x]=1;
while (u)
{
x=c[u];
for (i=a[x][a[x][0].ad+1].ad+1; i<=a[x][0].ad && uz[a[x][i].ad]; i++);
a[x][a[x][0].ad+1].ad=i;
if (i<=a[x][0].ad)
{
c[++u]=a[x][i].ad;
uz[a[x][i].ad]=1;
if (x<a[x][i].ad)
dist[a[x][i].ad]=dist[x]+a[x][i].dis;
else
dist[a[x][i].ad]=dist[x]-a[x][i].dis;
if (a[x][i].ad == y) return abs(dist[y]);
}
else
u--;
}
return 0;
}
void writedata()
{
FILE *fout=fopen(outfile, "w");
fprintf(fout, "%ld", rez);
fclose(fout);
}
int main()
{
readdata();
rez=DFS(x);
writedata();
return 0;
}