Pagini recente » Cod sursa (job #987485) | Cod sursa (job #1979792) | Cod sursa (job #1409971) | Cod sursa (job #1182731) | Cod sursa (job #256818)
Cod sursa(job #256818)
#include <stdio.h>
#include <string.h>
const int NMAX=2300;
long c[NMAX][NMAX], m, tc, dist[NMAX];
int x[NMAX], y[NMAX], n, ax, ay, cont[NMAX], q[NMAX], *a[NMAX];
long bf(int x, int y);
int main()
{
long i;
freopen("sate.in", "r", stdin);
freopen("sate.out", "w", stdout);
scanf("%d%ld%d%d", &n, &m, &ax, &ay);
for (i=0; i<m; i++)
{
scanf("%d%d%ld", &x[i], &y[i], &tc);
if (x[i]<y[i])
{
c[x[i]][y[i]]=tc;
c[y[i]][x[i]]=-tc;
}//if
else
{
c[x[i]][y[i]]=-tc;
c[y[i]][x[i]]=tc;
}//else
cont[x[i]]++;
cont[y[i]]++;
}//for i
for (i=1; i<=n; i++)
{
a[i]=new int[cont[i]+1];
a[i][0]=0;
}//for i
for (i=0; i<m; i++)
{
a[x[i]][++a[x[i]][0]]=y[i];
a[y[i]][++a[y[i]][0]]=x[i];
}//for i
printf("%ld", bf(ax, ay));
return 0;
}//main
long bf(int x, int y)
{
int u=0, p=0, i, t, t1;
memset(dist, -1, sizeof(dist));
q[u]=x;
dist[x]=0;
while (p<=u)
{
t=q[p++];
for (i=1; i<=a[t][0]; i++)
{
t1=a[t][i];
if (dist[t1]<0)
{
dist[t1]=dist[t]+c[t][t1];
q[++u]=t1;
if (t1==y)
return dist[y];
}//if
}//for i
}//while
return -1;
}//bf