Pagini recente » Cod sursa (job #2179936) | Cod sursa (job #1253363) | Cod sursa (job #221710) | Cod sursa (job #1062273) | Cod sursa (job #3342678)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("pscnv.in");
ofstream fout("pscnv.out");
int main()
{
int n, m, X, Y; fin >> n >> m >> X >> Y;
vector<vector<pair<int, int>>> v(n + 1);
for(int i = 0;i < m;i++)
{
int a, b, c; fin >> a >> b >> c;
v[a].push_back({c, b});
}
int l, r;
l = 0;
r = 1001;
int ans = -1;
while(l < r)
{
int mid = (l + r) / 2;
// cout << "Mid: " << mid << endl;
priority_queue<pair<int, int>> q;
q.push({0, X});
int total_cost = 0;
vector<int> vis(n + 1, 0);
vis[0] = 1;
while (!q.empty())
{
if(vis[Y] == 1) break;
int nod = q.top().second;
int cost = q.top().first;
q.pop();
for(int i = 0;i < v[nod].size();i++)
{
int nnod = v[nod][i].second;
int ccost = v[nod][i].first;
if(ccost <= mid and vis[nnod] == 0)
{
vis[nnod] = 1;
total_cost = max(total_cost, ccost);
q.push({ccost, nnod});
}
}
}
// cout << "--> Totoal cost: " << total_cost << endl;
if(total_cost <= mid and vis[Y] == 1)
{
ans = mid;
r = mid;
}
else l = mid + 1;
}
fout << ans << endl;
}