Pagini recente » Cod sursa (job #193708) | Cod sursa (job #1123072) | Cod sursa (job #129518) | Cod sursa (job #1799148) | Cod sursa (job #1552790)
#include <stdio.h>
#include <string.h>
#include <vector>
#include <queue>
#include <algorithm>
#include <utility>
#define pii pair< int,int >
#define st first
#define nd second
using namespace std;
const int MN = 30004;
int N,M,X,Y;
bool B[MN];
vector< pii > G[MN];
queue< pii > Q;
int main()
{
freopen("sate.in","r",stdin);
freopen("sate.out","w",stdout);
scanf("%d %d %d %d",&N,&M,&X,&Y);
while (M--)
{
int i,j,ds;
scanf("%d %d %d",&i,&j,&ds);
G[i].push_back(make_pair(j,ds));
G[j].push_back(make_pair(i,ds));
}
int Dist = 0,Node = X;
Q.push(make_pair(X,0));
B[X]++;
while (!Q.empty())
{
Node = Q.front().st;
Dist += Q.front().nd;
int Sz = G[Node].size();
Q.pop();
if (Node == Y)
{
printf("%d\n",Dist);
return 0;
}
for (int i = 0;i < Sz;i++)
if (!B[G[Node][i].st])
{
B[G[Node][i].st]++;
Q.push(make_pair(G[Node][i].st,(G[Node][i].st >= Node ? G[Node][i].nd : -G[Node][i].nd)));
}
}
return 0;
}