Submission

Status:

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

Subtask/Task Score:

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

Score: 50

User: SparkPun

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

Language: cpp

Time: 1.097 second

Submitted On: 2026-03-22 16:52:55

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
vector<tuple<int,int,int>>edge;
int parent[N],sz[N];
bool cmp(const tuple<int,int,int>&a,const tuple<int,int,int>&b){
    return get<2>(a)<get<2>(b);
}
int findSet(int u){
    if(parent[u]==u) return u;
    return parent[u]=findSet(parent[u]);
}
void unionSet(int u,int v){
    int U=findSet(u),V=findSet(v);
    if(U!=V){
        if(sz[U]<=sz[V]){
            parent[V]=U;
            sz[U]+=sz[V];
        }
        else{
            parent[U]=V;
            sz[V]+=sz[U];
        }
    }
}
int main(){
    ios_base::sync_with_stdio(0),cin.tie(0);
    int n,m,q;
    cin >> n >> m >> q;
    while(m--){
        int u,v,w;
        cin >> u >> v >> w;
        edge.push_back({u,v,w});
    }
    sort(edge.begin(),edge.end(),cmp);
    while(q--){
        int a,b,k;
        cin >> a >> b >> k;
        for(int i=0;i<=n;i++){
            parent[i]=i;
            sz[i]=1;
        }
        for(auto [u,v,w]:edge){
            if(findSet(u)!=findSet(v) && w<=k){
                unionSet(u,v);
            }
        }
        if(findSet(a)==findSet(b)) cout << "Yes" << endl;
        else cout << "No" << endl;
    }
}