Cod sursa(job #998523)

Utilizator manutrutaEmanuel Truta manutruta Data 17 septembrie 2013 13:59:21
Problema Sate Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
# include <iostream>
# include <fstream>
# include <vector>
# include <bitset>
# include <queue>
# include <algorithm>
using namespace std;

# define MAXN 30010
# define MAXM 100034
typedef vector< pair<int, int> > :: iterator iter;

ifstream f("sate.in");
ofstream g("sate.out");

int n, m, x, y;
vector< pair<int, int> > G[MAXN];
bitset<MAXN> viznod;
queue<int> coada;
int dist[MAXN];

void bfs()
{
    viznod[x] = true;
    dist[x] = 0;
    coada.push(x);
    while (!coada.empty()) {
        int nd = coada.front();
        coada.pop();

        for (iter it = G[nd].begin(); it != G[nd].end(); it++) {
            if (viznod[it->first] == false) {
                viznod[it->first] = true;
                coada.push(it->first);
                if (it->second > nd) {
                    dist[it->first] = dist[nd] + it->second;
                } else {
                    dist[it->first] = dist[nd] - it->second;
                }
            }
        }

        if (dist[y] != 0) {
            g << abs(dist[y]);
            return;
        }
    }
}

int main()
{
    f >> n >> m >> x >> y;
    for (int i = 1; i <= m; i++) {
        int i, j, d;
        f >> i >> j >> d;
        G[i].push_back(make_pair(j, d));
        G[j].push_back(make_pair(i, d));
    }

    bfs();

    return 0;
}