Cod sursa(job #3342678)

Utilizator MorariuTMorariu MorariuT Data 25 februarie 2026 11:02:09
Problema PScNv Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.4 kb
#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;
}