Pagini recente » Cod sursa (job #3285007) | Cod sursa (job #3191752) | Cod sursa (job #1940050) | Cod sursa (job #1781212) | Cod sursa (job #2104613)
#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;
}