Pagini recente » Cod sursa (job #819120) | Cod sursa (job #265288) | Cod sursa (job #920665) | Cod sursa (job #2438557) | Cod sursa (job #2518803)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in ("sate.in");
ofstream out ("sate.out");
const int N=30001;
const int M=100025;
int lst[N],nr,urm[2*M],dist[M],vf[2*M],d[N],q[N],fin,n;
bool viz[N];
void adauga (int a, int b, int l)
{
vf[++nr]=b;
urm[nr]=lst[a];
lst[a]=nr;
dist[nr]=l;
}
void bfs (int x)
{
int st=0;
int dr=-1;
q[++dr]=x;
viz[x]=true;
while (st<=dr)
{
int next=q[st++];
for (int p=lst[next];p!=0;p=urm[p])
{
int y=vf[p];
if (!viz[y])
{
viz[y]=true;
d[y]=d[next]+dist[p];
q[++dr]=y;
}
}
}
}
int main()
{
int m,x,a,b,l;
in>>n>>m>>x>>fin;
for (int i=1;i<=m;i++)
{
in>>a>>b>>l;
adauga (a,b,l);
adauga (b,a,-l);
}
bfs (x);
out<<d[fin];
return 0;
}