Pagini recente » Cod sursa (job #3139699) | Cod sursa (job #934555) | Cod sursa (job #2573961) | Cod sursa (job #2640847) | Cod sursa (job #1135308)
#include <fstream>
#include <algorithm>
#include <vector>
#include <queue>
#include <sstream>
using namespace std;
int main()
{
ifstream cin("pscnv.in");
ofstream cout("pscnv.out");
int n, m, x, y;
string buffer((istreambuf_iterator<char>(cin)), std::istreambuf_iterator<char>());
int bufferIndex = 0;
vector <vector< pair<int,short> > > graph;
queue<int> q;
vector<bool> visited;
auto nextInt = [&]() {
int ret = 0;
while (!('0' <= buffer[bufferIndex] && buffer[bufferIndex] <= '9')) bufferIndex++;
while ('0' <= buffer[bufferIndex] && buffer[bufferIndex] <= '9') {
ret = ret * 10 + buffer[bufferIndex++] - '0';
}
return ret;
};
n = nextInt(); m = nextInt(); x = nextInt(); y = nextInt();
x--;
y--;
graph.resize(n);
visited.resize(n);
for (int a, b, c; m; m--) {
a = nextInt(); b = nextInt(); c = nextInt();
a--;
b--;
graph[a].push_back({ b, c });
}
int l = 1, r = 1000;
while (l <= r) {
int mid = (l + r) / 2;
fill(visited.begin(), visited.end(),false);
visited[x] = true;
q.push(x);
while (!q.empty()) {
int v = q.front();
q.pop();
for (const auto& w : graph[v]) {
if (w.second <= mid && !visited[w.first]) {
visited[w.first] = true;
q.push(w.first);
}
}
}
if (visited[y]) {
r = mid - 1;
} else {
l = mid + 1;
}
}
cout << l;
return 0;
}