Cod sursa(job #2479225)

Utilizator AlexandruabcdeDobleaga Alexandru Alexandruabcde Data 23 octombrie 2019 16:07:51
Problema PScNv Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <fstream>
#include <vector>
#define pb push_back

using namespace std;

ifstream f ("pscnv.in");
ofstream g ("pscnv.out");

constexpr int NMAX = 25e4 + 5;

int n, m, x, y;

vector <pair <int, int> > G[NMAX];
bool viz[NMAX];

void dfs (int nod, int val)
{
    viz[nod] = 1;
    for (int i=0; i<G[nod].size(); ++i)
    {
        int y = G[nod][i].first;
        int cost = G[nod][i].second;

        if (!viz[y] && cost <= val) dfs(y, val);
    }
}
bool verif(int val)
{
    for (int i=1; i<=n; ++i)
        viz[i] = 0;

    dfs(x, val);

    return (viz[y] == 1);
}

int main()
{
    f >> n >> m >> x >> y;

    int dr=0;
    for (int i=1; i<=m; ++i)
    {
        int a, b, c;
        f >> a >> b >> c;

        G[a].pb({b, c});
        dr = max(dr, c);
    }

    int st=1;
    int sol=0;

    while (st <= dr)
    {
        int mij = (st + dr) / 2;

        if (verif(mij) == true)
        {
            sol = mij;
            dr = mij - 1;
        }
        else st = mij + 1;
    }

    g << sol << '\n';
    return 0;
}