Pagini recente » Cod sursa (job #2981441) | Cod sursa (job #601565) | Cod sursa (job #1392450) | Cod sursa (job #835115) | Cod sursa (job #67893)
Cod sursa(job #67893)
#include<stdio.h>
#include<stdlib.h>
#define Nm 30001
#define Unvizited 1000000000
#define abs(x) ((x)<0?-(x):(x))
int *G[Nm],*C[Nm],D[Nm],Dx[Nm],Dy[Nm],n,x,y;
void read()
{
int m,i,j,k;
freopen("sate.in","r",stdin);
scanf("%d%d%d%d",&n,&m,&x,&y);
while(m--)
{
scanf("%d%d%d",&i,&j,&k);
G[i]=(int*)realloc(G[i],(D[i]+1)*sizeof(int));
C[i]=(int*)realloc(C[i],(D[i]+1)*sizeof(int));
G[i][D[i]]=j;
C[i][D[i]++]=k;
G[j]=(int*)realloc(G[j],(D[j]+1)*sizeof(int));
C[j]=(int*)realloc(C[j],(D[j]+1)*sizeof(int));
G[j][D[j]]=i;
C[j][D[j]++]=-k;
}
}
void DFSx(int x)
{
int i,y;
for(i=0;i<D[x];++i)
{
y=G[x][i];
if(Dx[y]==Unvizited)
{
Dx[y]=Dx[x]+C[x][i];
DFSx(y);
}
}
}
void DFSy(int x)
{
int i,y;
for(i=0;i<D[x];++i)
{
y=G[x][i];
if(Dy[y]==Unvizited)
{
Dy[y]=Dy[x]+C[x][i];
DFSy(y);
}
}
}
int solve()
{
int i;
for(i=1;i<=n;++i)
Dx[i]=Dy[i]=Unvizited;
Dx[x]=0; DFSx(x);
Dy[y]=0; DFSy(y);
for(i=1;i<=n;++i)
if(Dx[i]!=Unvizited && Dy[i]!=Unvizited)
return abs(abs(Dx[i])-abs(Dy[i]));
}
void write(int s)
{
freopen("sate.out","w",stdout);
printf("%d\n",s);
}
int main()
{
read();
write(solve());
return 0;
}