Submission #696305

#TimeUsernameProblemLanguageResultExecution timeMemory
696305Dan4LifeInside information (BOI21_servers)C++17
0 / 100
32 ms700 KiB
#include <bits/stdc++.h>
using namespace std;
const int mxN = (int)130000;

int n, k, p[mxN], tim[mxN], sz[mxN];

int findSet(int i){ return i==p[i]?i:p[i]=findSet(p[i]); }
bool isSameSet(int i, int j) { return findSet(i)==findSet(j); }
void unionSet(int i, int j){
    int x = findSet(i);
    int y = findSet(j);
    if(x==y) return;
    if(sz[x]<sz[y]) swap(x,y);
    p[y]=x; sz[x]+=sz[y];
}

int32_t main()
{
    ios_base::sync_with_stdio(false); cin.tie(0);
    cin >> n >> k;
    for(int i = 1; i <= n; i++) p[i] = i, sz[i] = 1;
    for(int _ = 0; _ < n+k-1; _++){
        char t; int x, y;
        cin >> t >> x;
        if(t=='S'){
            cin >> y;
            tim[x]=tim[y]=_;
            unionSet(x,y);
        }
        else if(t=='Q'){
            cin >> y;
            if(isSameSet(x,y) and tim[x]<=tim[y]) cout << "yes";
            else cout << "no";
        }
        else{
            cout << sz[findSet(x)];
        }
        if(t!='S') cout << "\n";
    }
}
#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...
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...