Cod sursa(job #2461258)

Utilizator FunnyStockyMihnea Andreescu FunnyStocky Data 25 septembrie 2019 11:28:16
Problema PScNv Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#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;
}