Pagini recente » Cod sursa (job #1117180) | Cod sursa (job #677861) | Cod sursa (job #947920) | Cod sursa (job #2551481) | Cod sursa (job #2461259)
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
const int N = 250000 + 7;
const int M = 500000 + 7;
struct edge {
int to;
int c;
};
int n, m, s, d;
vector <edge> g[N];
bool u[N];
bool ok(int num) {
for (int i = 1; i <= n; i++)
u[i] = 0;
u[s] = 1;
queue <int> q;
q.push(s);
while (!q.empty() && u[d] == 0) {
int nod = q.front();
q.pop();
for (auto it : g[nod]) {
if (u[it.to] == 0 && it.c <= num) {
u[it.to] = 1;
q.push(it.to);
}
}
}
return u[d];
}
int main() {
freopen ("pscnv.in", "r", stdin);
freopen ("pscnv.out", "w", stdout);
scanf("%d %d %d %d", &n, &m, &s, &d);
for (int i = 1; i <= m; i++) {
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
g[a].push_back({ b,c });
}
int l = 1, r = 1000, ans = 0;
while (l <= r) {
int mid = (l + r) / 2;
if (ok(mid)) {
ans = mid;
r = mid - 1;
} else {
l = mid + 1;
}
}
printf("%d\n", ans);
return 0;
}