Submission #1292487

#TimeUsernameProblemLanguageResultExecution timeMemory
1292487chaitanyamehtaLost Array (NOI19_lostarray)C++20
0 / 100
6 ms332 KiB
// https://oj.uz/problem/view/NOI19_charges
#include<bits/stdc++.h>
using namespace std;

#define int long long
#define pii pair<int ,int>

struct DSU{
    vector<int> par;
    vector<int> size;
    void init(int n){
        par.resize(n + 1);
        size.assign(n + 1 , 1);
        for(int i = 0;i<=n;i++)par[i] =i;
    }
    int find(int u){
        if(par[u] == u) return u;
        return par[u] = find(par[u]);
    }
    void Union(int u , int v){
        int paru = find(u); int parv = find(v);

        if(paru == parv){
            return;
        }
        if(size[paru] < size[parv]){
            par[paru] = parv;
            size[parv] += size[paru];
        }
        else{
            par[parv] = paru;
            size[paru] += size[parv];
        }

    }

};

signed main(){
    int n , q;
    cin >> n >> q;
    // vector<vector<int>> a(n + 1 , vector<int>(n + 1 , 0));
    DSU dsu;
    dsu.init(n);
    while(q--){
        char t;
        cin>>t;
        int u , v;cin>>u>>v;
        
        if(t == 'Q'){
            int paru = dsu.find(u);
            int parv = dsu.find(v);

            if(paru == parv){
                cout << "R\n";
            }
            else{
                cout << "?\n";
            }
        }
        
        else{
            dsu.Union(u , v);
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...