Pagini recente » Cod sursa (job #1944189) | Cod sursa (job #1149260) | Cod sursa (job #2615058) | Cod sursa (job #148665) | Cod sursa (job #1701888)
#include <cstdio>
#define MAX 30000
#define MAXM 100024
using namespace std;
int n, m, lista[MAX+1], val[2*MAXM+1], next[2*MAXM+1], d[2*MAXM+1], viz[MAX+1], dist[MAX+1], k;
int coada[MAX+1];
void adauga(int x, int y, int D)
{
int p=lista[x];
while(p)
p=next[p];
k++;
val[k]=y;
d[k]=D;
next[k]=lista[x];
lista[x]=k;
}
void bfs(int nod)
{
int st, dr, p;
st=dr=1;
viz[nod]=1;
coada[st]=nod;
while(st<=dr)
{
p=lista[coada[st]];
while(p)
{
if(viz[val[p]]==0)
{
viz[val[p]]=1;
coada[++dr]=val[p];
dist[val[p]]=dist[coada[st]]+d[p];
}
p=next[p];
}
st++;
}
}
int main()
{
freopen("sate.in", "r", stdin);
freopen("sate.out", "w", stdout);
int i, a,b, x, y, D;
scanf("%d%d%d%d", &n, &m, &a, &b);
for(i=1;i<=m;i++)
{
scanf("%d%d%d", &x, &y, &D);
adauga(x, y, D);
adauga(y, x, -1*D);
}
bfs(a);
printf("%d", dist[b]);
return 0;
}