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;
}