Submission

Status:

(PPPPPPPPP)(PPPP)(PPPPPP)(PPPPPPPPPP)

Subtask/Task Score:

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

Score: 100

User: august

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

Language: cpp

Time: 0.139 second

Submitted On: 2026-03-10 20:45:51

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

int fnd(int u, vector<int> &par) {
    if (u == par[u]) return u;
    return par[u] = fnd(par[u], par);
}

int main() {
    cin.tie(0)->sync_with_stdio(0);
    int n,m,q;
    cin>> n>> m>> q;

    vector<pair<int,pair<int,int>>> g;
    for (int i=0; i<m; i++) {
        int u,v,w;
        cin>> u>> v>> w;

        g.push_back({w, {u,v}});
    }

    sort(g.begin(), g.end());
    vector<int> par(n);
    iota(par.begin(), par.end(), 0);

    vector<pair<pair<int,int>,pair<int,int>>> query(q);
    for (int i=0; i<q; i++) cin>> query[i].second.first>> query[i].second.second>> query[i].first.first, query[i].first.second = i;
    sort(query.begin(), query.end());

    vector<bool> ans(q, 0);

    int i=0;
    for (int j=0; j<q; j++) {
        int s=query[j].second.first, t=query[j].second.second, k=query[j].first.first;

        while (i<m && g[i].first <= k) {
            int u=g[i].second.first, v=g[i].second.second, w=g[i].first;

            int a=fnd(u, par);
            int b=fnd(v, par);

            if (a != b) par[a] = b;
            i++;
        }

        int id = query[j].first.second;
        if (fnd(par[s], par) == fnd(par[t], par)) ans[id] = 1;
    }
    for (int i=0; i<q; i++) cout<< (ans[i] ? "Yes" : "No")<< '\n';
}