Pagini recente » Cod sursa (job #1648140) | Cod sursa (job #2382789) | Cod sursa (job #977866) | Cod sursa (job #2069437) | Cod sursa (job #263358)
Cod sursa(job #263358)
#include<stdio.h>
const int M=100024, N=30000;
struct much{ int s,d,c; } muchie[M];
int nr[N];
int dx[N],q[N],p,u;
char viz[N];
int main()
{
freopen("sate.in","r",stdin);
freopen("sate.out","w",stdout);
int n,m,x,y,i;
int *v[N], *d[N];
scanf("%d%d%d%d",&n,&m,&x,&y);
for(i=0;i<m;++i)
{
scanf("%d%d%d",&muchie[i].s,&muchie[i].d,&muchie[i].c);
++nr[muchie[i].s]; ++nr[muchie[i].d];
}
for(i=1;i<=n;++i)
{
v[i]=new int[nr[i]+1];
d[i]=new int[nr[i]+1];
v[i][0]=0;
}
for(i=0;i<m;++i)
{
v[muchie[i].s][ ++v[ muchie[i].s ][0] ] = muchie[i].d;
d[muchie[i].s][ v[muchie[i].s][0] ] = muchie[i].c;
v[muchie[i].d][ ++v[ muchie[i].d ][0] ] = muchie[i].s;
d[muchie[i].d][ v[muchie[i].d][0] ] = muchie[i].c;
}
p=-1; u=0; viz[x]=1; q[0]=x;
while(p<u)
{
++p;
for(i=1;i<=nr[q[p]];++i)
{
if(viz[v[q[p]][i]]) continue;
q[++u]=v[q[p]][i];
if(q[u]==y)
{
if(q[p]<q[u])
//dx[q[u]]=dx[q[p]]+d[q[p]][i];
printf("%d\n",dx[q[p]]+d[q[p]][i]);
else
//dx[q[u]]=dx[q[p]]-d[q[p]][i];
printf("%d\n",dx[q[p]]-d[q[p]][i]);
return 0;
}
viz[v[q[p]][i]]=1;
if(q[p]<q[u])
dx[q[u]]=dx[q[p]]+d[q[p]][i];
else
dx[q[u]]=dx[q[p]]-d[q[p]][i];
}
}
return 0;
}