Cod sursa(job #2104613)

Utilizator DruffbaumPopescu Vlad Druffbaum Data 11 ianuarie 2018 22:40:03
Problema PScNv Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <cstdio>
#include <cstring>
#include <vector>

const int MAXN = 2e5 + 5e4;
const int MAXK = 1e3;
const int INF = 0x3f3f3f3f;

struct Edge {
  int u, c;
};

std::vector <Edge> g[MAXN + 1];
std::vector <int> dist[MAXK + 1];
int dm[MAXN + 1];

static inline int max(int a, int b) {
  return a > b ? a : b;
}

int main() {
  int n, m, s, d, u, v, c, t;
  FILE *f = fopen("pscnv.in", "r");
  fscanf(f, "%d%d%d%d", &n, &m, &s, &d);
  for (int i = 0; i < m; ++i) {
    fscanf(f, "%d%d%d", &u, &v, &c);
    g[u].push_back({v, c});
  }
  fclose(f);
  memset(dm, INF, sizeof(dm));
  dm[s] = 0;
  dist[0].push_back(s);
  for (int i = 0; i <= MAXK; ++i) {
    for (auto u: dist[i]) {
      if (dm[u] >= i) {
        for (auto v: g[u]) {
          t = max(i, v.c);
          if (dm[v.u] > t) {
            dm[v.u] = t;
            dist[t].push_back(v.u);
          }
        }
      }
    }
  }
  f = fopen("pscnv.out", "w");
  fprintf(f, "%d\n", dm[d]);
  fclose(f);
  return 0;
}