Pagini recente » Cod sursa (job #26771) | Cod sursa (job #3286378) | Cod sursa (job #288772) | Cod sursa (job #2827441) | Cod sursa (job #491578)
Cod sursa(job #491578)
#include <stdio.h>
#include <queue>
#define Max 30010
using namespace std;
struct nod{
int info;
int D;
nod *next;
};
int N,Y,X,M;
nod *G[Max];
void add(int a, int b, int d)
{
nod *p = new nod;
p->info = b;
p->D = d;
p->next = G[a];
G[a] = p;
}
void read()
{
int a, b, d;
scanf("%d %d %d %d",&N,&M,&X,&Y);
for(int i = 1; i <= M; i++)
{
scanf("%d %d %d",&a,&b,&d);
add(a,b,d);
add(b,a,-d);
}
if(X > Y)
{
int t = X;
X = Y;
Y = t;
}
}
unsigned int cost[Max];
unsigned int BFS()
{
int t;
queue <int> Q;
nod *p;
Q.push(X);
while(!Q.empty())
{
t = Q.front();
p = new nod;
for(p = G[t]; p; p = p->next)
if(!cost[p->info])
{
Q.push(p->info);
cost[p->info] = cost[t] + p->D;
}
if(cost[Y])
return cost[Y];
if(t == X)
cost[X] = 1;
Q.pop();
}
return 0;
}
int main()
{
freopen ("sate.in","r",stdin);
freopen ("sate.out","w",stdout);
read();
printf("%u\n",BFS());
return 0;
}