Cod sursa(job #3145987)

Utilizator andrei_C1Andrei Chertes andrei_C1 Data 17 august 2023 18:54:39
Problema PScNv Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("pscnv.in");
ofstream fout("pscnv.out");

const int kN = 25e4;

int x, y, k;
vector<vector<pair<int, int>>> adj;
vector<bool> vis;

void maxSelf(int &x, int y) {
	if(y > x) {
		x = y;
	}
}

bool dfs(int u = x) {
	if(u == y) {
		return 1;
	}
	bool ans = 0;
	vis[u] = 1;
	for(const auto &it: adj[u]) {
		if(!vis[it.first] && it.second <= k) {
			ans |= dfs(it.first);
		}
		if(ans == 1) {
			break;
		}
	}
	return ans;
}

int main() {
	int n, m;
	fin >> n >> m >> x >> y;
	x--; y--;
	adj = vector<vector<pair<int, int>>>(n);
	int kmax = 1;
	vector<int> vals;
	for(int i = 0; i < m; i++) {
		int u, v, k;
		fin >> u >> v >> k;
		u--; v--;
		adj[u].emplace_back(v, k);
		maxSelf(kmax, k);
		vals.emplace_back(k);
	}
	sort(vals.begin(), vals.end());
	vals.erase(unique(vals.begin(), vals.end()), vals.end());
	int l = 0, r = vals.size() - 1, mid;
	while(l <= r) {
		mid = (l + r) >> 1;
		k = vals[mid];
		vis = vector<bool>(n, 0);
		if(dfs()) {
			r = mid - 1;
		} else {
			l = mid + 1;
		}
	}
	fout << vals[r + 1] << '\n';
	return 0;
}