Pagini recente » Cod sursa (job #1806749) | Cod sursa (job #1269715) | Cod sursa (job #2530543) | Cod sursa (job #192619) | Cod sursa (job #1383008)
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
const int kMaxN = 250005, kMaxK = 1005;
ifstream fin("pscnv.in");
ofstream fout("pscnv.out");
int N, M, x, y;
int mx[kMaxN];
vector<pair<int, int>> G[kMaxN];
vector<int> q[kMaxK];
char buffer[35], *p;
void Parse(int &x) {
x = 0;
while (!isdigit(*p))
++p;
while (isdigit(*p))
x = x * 10 + *(p++) - '0';
}
int main() {
fin.getline(p = buffer, 35);
Parse(N);
Parse(M);
Parse(x);
Parse(y);
while (M--) {
int x, y, k;
fin.getline(p = buffer, 35);
Parse(x);
Parse(y);
Parse(k);
G[x].emplace_back(y, k);
}
memset(mx, 0x3f, sizeof mx);
mx[x] = 0;
q[0].push_back(x);
for (int cost = 0; cost < kMaxK; ++cost)
for (int node : q[cost]) {
if (mx[node] != cost)
continue;
for (const auto &it : G[node]) {
int new_cost = max(cost, it.second);
if (new_cost < mx[it.first]) {
mx[it.first] = new_cost;
q[new_cost].push_back(it.first);
}
}
}
fout << mx[y] << "\n";
return 0;
}