Submission

Status:

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

Subtask/Task Score:

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

Score: 100

User: meme_boi2

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

Language: cpp

Time: 0.146 second

Submitted On: 2026-03-19 16:33:43

#include <bits/stdc++.h>
using namespace std;
#define tii tuple<int,int,int>
vector<int> pa(1e5+1), dist(1e5+1,0);
priority_queue <tii,vector<tii>,greater<tii>> pq;
bool comp(array<int,4> a,array<int,4> b){
    return a[2] < b[2];
}
int find(int i){
    if(pa[i] == i) return i;
    else return pa[i] = find(pa[i]);
}
void U(int u, int v){
    u = find(u); v = find(v);
    if(u < v){
        pa[v] = u;
        dist[u] = max(dist[u],dist[v]);
    }else{
        pa[u] = v;
        dist[u] = max(dist[u],dist[v]); 
    }
}
int32_t main(){
    cin.tie(nullptr)->sync_with_stdio(0);
    int n, m, q;
    cin >> n >> m >> q;
    for(int i = 0; i < n; i++) pa[i] = i;
    while(m--){
        int u, v, w;
        cin >> u >> v >> w;
        pq.push({w,u,v});
    }
    vector<array<int,4>> query(q);
    vector<int> ans(q);
    for(int i = 0; i < q; i++){
        cin >> query[i][0] >> query[i][1] >> query[i][2];
        query[i][3] = i;
    }
    sort(query.begin(),query.end(),comp);
    for(int i = 0; i < q; i++){
        while(!pq.empty()){
            auto [w,u,v] = pq.top();
            if(w > query[i][2]) break;

            pq.pop();
            U(u,v);
        }
        if(find(query[i][0]) == find(query[i][1])){
            ans[query[i][3]] = 1;
        }else{
            ans[query[i][3]] = 0;
        }
    }
    for(int i = 0; i < q; i++){
        if(ans[i] == 1){
            cout << "Yes\n";
        }else{
            cout << "No\n";
        }
    }
}
/*
c2_su64_towntravel

cd "c:\Users\RICOH-NB110\Desktop\Computer Programing\gchan\" ; if ($?) { g++ c2_su64_towntravel.cpp -o c2_su64_towntravel } ; if ($?) { .\c2_su64_towntravel}
*/