Submission

Status:

(PPPPPPPPP)(PPPP)(PP-SSS)(SSSSSSSSSS)

Subtask/Task Score:

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

Score: 50

User: C12

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

Language: cpp

Time: 0.118 second

Submitted On: 2026-03-19 21:40:48

#include <bits/stdc++.h>

using namespace std;

const int mod = 1e9+7;
#define ll long long
#define pii pair<ll,int>

vector<tuple<int,int,int,int>> edge(500010);
vector<int>p(100010);
vector<int>out(300010);

int dsu(int i,vector<int> &p){
    if(p[i] != i){
        p[i] = dsu(p[i],p);
    }
    return p[i];
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    int n,m,q;

    cin >> n >> m >> q;

    n++;

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

        edge[i] = (make_tuple(w,0,u,v));
    }

    for(int i = 1;i <= q;i++){
        cin >> u >> v >> w;

        edge[i+m-1] = (make_tuple(w,i,u,v));
    }

    sort(edge.begin(),edge.begin()+m+q);

    for(int i = 0;i <= n;i++) p[i] = i;

    for(int i = 0;i < n+q;i++){
        int w = get<0>(edge[i]);
        int ques = get<1>(edge[i]);
        int u = get<2>(edge[i]);
        int v = get<3>(edge[i]);

        if(ques){
            if(dsu(u,p) != dsu(v,p)){
                out[ques] = 0;
            }
            else{
                out[ques] = 1;
            }
            // cout << ques << '\n';
        }
        else{
            if(dsu(u,p) != dsu(v,p)){
                p[dsu(u,p)] = p[dsu(v,p)];
            }
        }
    }

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

    return 0;
}