Submission

Status:

(PPPPPPPPP)(PPPP)(PPxSSS)(SSSSSSSSSS)

Subtask/Task Score:

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

Score: 50

User: C12

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

Language: cpp

Time: 0.126 second

Submitted On: 2026-01-22 11:33:42

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

#define f first
#define s second
#define pii pair<int,int>
#define puii pair<uint,uint>
#define piii pair<int,pii>
#define ll long long
#define uint unsigned long long
#define mp make_pair
 
#define mpiii(a,b,c) make_pair(a,make_pair(b,c));
int32_t mod = 1e9+7;

vector<int>p(100 * 1000);
vector<int>ans(200 * 1000);

int dsu(int i){
    if(p[i] != i) p[i] = dsu(p[i]);
    return p[i];
}

void solve(){
    int n,m,q;
    int u,v,w,idx;
    tuple<int,int,int,int> x;

    cin >> n >> m >> q;
    
    vector<tuple<int,int,int,int>>edge;

    for(int i = 0;i < n;i++){
        p[i] = i;
    }
    
    for(int i = 0;i < m;i++){
        cin >> u >> v >> w;
        if(u > v) swap(u,v);

        edge.push_back(make_tuple(w,-1,u,v));
    }

    for(int i = 0;i < q;i++){
        cin >> u >> v >> w;
        if(u > v) swap(u,v);

        edge.push_back(make_tuple(w,i,u,v));
    }

    sort(edge.begin(),edge.end());

    for(int i = 0;i < edge.size();i++){
        x = edge[i];
        w = get<0>(x);
        idx = get<1>(x);
        u = get<2>(x);
        v = get<3>(x);

        if(idx != -1){
            ans[idx] = (dsu(u) == dsu(v));
        }
        else if(dsu(u) != dsu(v)){
            p[dsu(u)] = p[dsu(v)];
        }
    }

    for(int i = 0;i < q;i++){
        if(ans[i]) cout << "Yes\n";
        else cout << "No\n";
    }

    return;
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    // ll q;
 
    // cin >> q;
    
    // while(q--) 
    solve();

    return 0;
}
/*
100 5 2
1 2 3
2 1 1
1 4 2
5 2


*/