Cod sursa(job #1488253)

Utilizator al.mocanuAlexandru Mocanu al.mocanu Data 18 septembrie 2015 11:46:29
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#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;
}