Cod sursa(job #1052324)

Utilizator razvan9310FMI - Razvan Damachi razvan9310 Data 11 decembrie 2013 02:11:19
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <fstream>
#include <vector>
#include <bitset>
#include <queue>
#define MAXN 30001
using namespace std;

int N, M, X, Y, dist[MAXN];
vector<int> Graph[MAXN], cost[MAXN];
bitset<MAXN> seen;
queue<int> que;

void input() {
  ifstream in("sate.in");
  in >> N >> M >> X >> Y;

  for (int i = 0; i < M; ++i) {
    int v1, v2, vcost;
    in >> v1 >> v2 >> vcost;

    Graph[v1].push_back(v2);
    cost[v1].push_back(vcost);
    Graph[v2].push_back(v1);
    cost[v2].push_back(vcost);
  }
  in.close();
}

int BFS() {
  que.push(X);

  while (!que.empty()) {
    int node = que.front();
    que.pop();

    int size = Graph[node].size();
    for (int i = 0; i < size; ++i) {
      int adjancted = Graph[node][i];
      if (!seen[adjancted]) {
        if (node < adjancted) {
          dist[adjancted] = dist[node] + cost[node][i];
        } else {
          dist[adjancted] = dist[node] - cost[node][i];
        }
        if (adjancted == Y) {
          return dist[adjancted];
        }
        seen[adjancted] = 1;
        que.push(adjancted);
      }
    }
  }
}

void output() {
  ofstream out("sate.out");
  out << BFS();
  out.close();
}

int main() {
  input();
  output();
  return 0;
}