Pagini recente » Cod sursa (job #32231) | Cod sursa (job #999870) | Cod sursa (job #1300620) | Cod sursa (job #1017876) | Cod sursa (job #1488253)
#include <stdio.h>
#include <vector>
#include <queue>
#define MAX 30005
#define pii pair<int, int>
#define mk make_pair
#define fir first
#define sec second
using namespace std;
int n, m, x, y, a, b, c;
vector<pii> l[MAX];
queue<pii> q;
bool viz[MAX];
int bfs(int x, int y);
int main(){
freopen("sate.in", "r", stdin);
freopen("sate.out", "w", stdout);
scanf("%d%d%d%d", &n, &m, &x, &y);
for(int i = 0; i < m; i++){
scanf("%d%d%d", &a, &b, &c);
l[a].push_back(mk(b, c));
l[b].push_back(mk(a, c));
}
printf("%d\n", bfs(x, y));
return 0;
}
int bfs(int x, int y){
q.push(mk(x, 0));
viz[x] = 1;
int i;
while(!q.empty()){
int node = q.front().fir, d = q.front().sec;
q.pop();
for(i = 0; i < l[node].size(); i++)
if(l[node][i].fir == y)
return node < l[node][i].fir ? d + l[node][i].sec : d - l[node][i].sec;
else if(!viz[l[node][i].fir]){
q.push(mk(l[node][i].fir, node < l[node][i].fir ? d + l[node][i].sec : d - l[node][i].sec));
viz[l[node][i].fir] = 1;
}
}
return -1;
}