Cod sursa(job #626141)

Utilizator cdc_rapidCurtusan Ciprian cdc_rapid Data 26 octombrie 2011 14:43:51
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
#define NMAX 30005

vector < pair<int, int> > A[NMAX];
queue<int> Q;
int dist[NMAX], viz[NMAX];
int N, M, X, Y, tail, head;

void read()
{
    scanf("%d %d %d %d", &N, &M, &X, &Y);
    if (X > Y) {
        int aux = X;
        X = Y;
        Y = aux;
    }
    int i, x, y, cost;
    for (i=1; i<=M; ++i) {
        scanf("%d %d %d", &x, &y, &cost);
        A[x].push_back(make_pair(y, cost));
        A[y].push_back(make_pair(x, cost));
    }
}

void BFS(int source)
{
    int i;
    viz[source] = 1;
    Q.push(source);
    dist[source] = 0;
    while (!Q.empty()) {
        int node = Q.front();
        Q.pop();
        for (i=0; i<A[node].size(); ++i) 
	if (!viz[A[node][i].first]) {
	    viz[A[node][i].first] = 1;
	    Q.push(A[node][i].first);
	    if (A[node][i].first < node) 
	        dist[A[node][i].first] = dist[node] -  A[node][i].second;
	    else 
	        dist[A[node][i].first] = dist[node] + A[node][i].second;
	}
    }
}

int main()
{
    freopen("sate.in", "r", stdin);
    freopen("sate.out", "w", stdout);
    read();
    BFS(X);
    printf("%d ", dist[Y]);
    return 0;
}