Pagini recente » Jobs | Cod sursa (job #3032567) | Cod sursa (job #1129152) | Cod sursa (job #2052349) | Cod sursa (job #133626)
Cod sursa(job #133626)
# include <stdio.h>
# include <stdlib.h>
#define nmax 31000
#define mmax 100125
FILE*f=fopen("sate.in","r");
FILE*g=fopen("sate.out","w");
struct pelem {long info; pelem *next;};
pelem *sat[mmax],*dist[mmax];
long first,last,n,m,i,j,x,y,d,varf1,varf2;
unsigned char s[nmax];
long distanta[nmax],coada[nmax];
void push(pelem *&first, long vl)
{
pelem *p;
p=new pelem;
p->info=vl;
p->next=first;
first=p;
}
void pop(pelem *&first, long &vl)
{
pelem *p;
vl=first->info;
p=first;
first=first->next;
delete(p);
}
void qin(long vl)
{
coada[last]=vl;
last++;
}
void qout(long &vl)
{
vl=coada[first];
first++;
}
void bf(long start)
{
long nod,varf,lung;
s[start]=1;
qin(start);
while (first!=last)
{
qout(nod);
while (sat[nod]!=NULL)
{
pop(sat[nod],varf);
pop(dist[nod],lung);
if (s[varf]==0)
{
s[varf]=1;
qin(varf);
if (nod<varf) distanta[varf]=distanta[nod]+lung;
else distanta[varf]=distanta[nod]-lung;
if (varf==y) return;
}
}
}
}
int main()
{
fscanf(f,"%ld %ld %ld %ld",&n,&m,&x,&y);
for (i=1; i<=m; i++)
{
fscanf(f,"%ld %ld %ld",&varf1,&varf2,&d);
push(sat[varf1],varf2);
push(dist[varf1],d);
push(sat[varf2],varf1);
push(dist[varf2],d);
}
first=1; last=1;
bf(x);
fprintf(g,"%ld",abs(distanta[y]));
return 0;
}