Codeforces
CF Step
Youtube Linkedin Discord Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Code : Max Value less than Threshold

#include <atcoder/dsu>
#include <bits/stdc++.h>

using namespace std;
using namespace atcoder;

void solve() {
    int n;
    cin >> n;
    vector<pair<int, pair<int, int>>> edges;
    for (int i = 0; i < n - 1; i++) {
        int u, v, w;
        cin >> u >> v >> w;
        u--;
        v--;
        edges.push_back({w, {u, v}});
    }
    sort(edges.begin(), edges.end());

    int q;
    cin >> q;
    vector<string> ans(q);
    vector<pair<int, int>> queries(q);
    vector<pair<int, pair<int, int>>> store(q);

    int ind = 0;
    for (int i = 0; i < q; i++) {
        int x, y, threshold;
        cin >> x >> y >> threshold;
        x--;
        y--;
        queries[i] = {threshold, i};
        store[i] = {threshold, {x, y}};
    }

    dsu d(n);
    sort(queries.begin(), queries.end());
    for (int i = 0; i < q; i++) {
        int threshold = queries[i].first;
        int q_ind = queries[i].second;

        while (ind < (int)edges.size() && edges[ind].first <= threshold) {
            int u = edges[ind].second.first;
            int v = edges[ind].second.second;
            d.merge(u, v);
            ind++;
        }

        int x = store[q_ind].second.first;
        int y = store[q_ind].second.second;
        ans[q_ind] = d.same(x, y) ? "YES" : "NO";
    }

    for (int i = 0; i < q; i++) {
        cout << ans[i] << "\n";
    }
}

int main() {
    int t;
    cin >> t;
    for (int zz = 0; zz < t; zz++) {
        solve();
    }
    return 0;
}
#include <atcoder/dsu>
#include <bits/stdc++.h>

using namespace std;
using namespace atcoder;

void solve() {
    int n;
    cin >> n;
    vector<pair<int, pair<int, int>>> edges;
    for (int i = 0; i < n - 1; i++) {
        int u, v, w;
        cin >> u >> v >> w;
        u--;
        v--;
        edges.push_back({w, {u, v}});
    }
    sort(edges.begin(), edges.end());

    int q;
    cin >> q;
    vector<string> ans(q);
    vector<pair<int, int>> queries(q);
    vector<pair<int, pair<int, int>>> store(q);

    int ind = 0;
    for (int ii = 0; ii < q; ii++) {
        int x, y, threshold;
        cin >> x >> y >> threshold;
        x--;
        y--;
        dsu d(n);
        for (int i = 0; i < (int)edges.size(); i++) {
            if (edges[i].first <= threshold) {
                d.merge(edges[i].second.first, edges[i].second.second);
            }
        }
        if (d.same(x, y)) {
            cout << "YES"
                 << "\n";
        } else {
            cout << "NO"
                 << "\n";
        }
    }
}

int main() {
    int t;
    cin >> t;
    for (int zz = 0; zz < t; zz++) {
        solve();
    }
    return 0;
}