Submission

Status:

(PPPPPPPPP)(PPPP)(PPTSSS)(SSSSSSSSSS)

Subtask/Task Score:

{25/25}{25/25}{0/20}{0/30}

Score: 50

User: tHeNyXs

Problemset: เดินทางข้ามชุมชน

Language: cpp

Time: 1.091 second

Submitted On: 2026-03-06 08:38:39

#include <bits/stdc++.h>
using namespace std;

const int N = 1e5+5;
vector<int> p(N);

struct Node {
    int u, v, w;
};

struct K {
    int a, b, k, idx;
};

int dsu(int a) {
    if (p[a] == a) return a;
    else return p[a] = dsu(p[a]);
}

bool cmpNode(const Node a, const Node b) {
    return a.w < b.w;
}

bool cmpK(const K a, const K b) {
    return a.k < b.k;
}

int main() {
    // ios_base::sync_with_stdio(false); cin.tie(nullptr);
    iota(p.begin(), p.end(), 0);
    int n, m, q; cin >> n >> m >> q;
    Node node[m];
    for (int i = 0; i < m; ++i) cin >> node[i].u >> node[i].v >> node[i].w;
    K k[q];
    for (int i = 0; i < q; ++i) {
        cin >> k[i].a >> k[i].b >> k[i].k;
        k[i].idx = i;
    }

    sort(node, node+m, cmpNode);
    sort(k, k+q, cmpK);

    vector<string> ans(q);
    for (int i = 0; i < q; ++i) {
        int nowK = k[i].k;
        int nowIdx = k[i].idx;
        int a = k[i].a;
        int b = k[i].b;
        // cout << "I : " << i << '\n';
        for (int j = 0; j < m; ++j) {
            if (node[j].w > nowK) break;
            int pu = dsu(p[node[j].u]);
            int pv = dsu(p[node[j].v]);
            if (pu == pv) continue;
            p[pu] = min(pu, pv);
            p[pv] = min(pu, pv);
        }
        // for (int j = 1; j <= n; ++j) {
        //     cout << p[j] << " ";       
        // } cout << '\n';
        if (dsu(a) == dsu(b)) ans[nowIdx] = "Yes";
        else ans[nowIdx] = "No";
    }
    for (auto i : ans) cout << i << '\n';

    return 0;
}