Submission #812322

#TimeUsernameProblemLanguageResultExecution timeMemory
812322MyCodeInside information (BOI21_servers)C++17
10 / 100
1179 ms377108 KiB
#include <bits/stdc++.h>

using namespace std;

#define int long long

signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr), cout.tie(nullptr);
    int n, k;
    cin >> n >> k;
    if(n <= 4000){
        set<int> st[n + 1];
        for (int i = 1; i <= n; i++)
            st[i].insert(i);
        int cnt[n + 1];
        for (int i = 1; i <= n; i++)
            cnt[i] = 1;
        for (int q = 0; q < n + k - 1; q++) {
            char t;
            cin >> t;
            if (t == 'S') {
                int a, b;
                cin >> a >> b;
                for (auto x: st[b])
                    if (st[a].find(x) == st[a].end())cnt[x]++;
                for (auto x: st[a])
                    if (st[b].find(x) == st[b].end())cnt[x]++;
                for (auto x: st[b])
                    st[a].insert(x);
                st[b] = st[a];
            } else if (t == 'Q') {
                int a, d;
                cin >> a >> d;
                if (st[a].find(d) == st[a].end())
                    cout << "no\n";
                else
                    cout << "yes\n";
            } else {
                int a;
                cin >> a;
                cout << cnt[a] << "\n";
            }
        }
        return 0;
    }
    int pos[n + 1], cur = 0;
    for (int i = 1; i <= n; i++)
        pos[i] = (int) 1e9;
    pos[1] = 0;
    for (int q = 0; q < n + k - 1; q++) {
        char t;
        cin >> t;
        if (t == 'S') {
            int a, b;
            cin >> a >> b;
            if (a != 1)swap(a, b);
            pos[b] = cur;
            cur++;
        } else if (t == 'Q') {
            int a, b;
            cin >> a >> b;
            if (a == 1) {
                if (pos[b] != (int) 1e9)
                    cout << "yes\n";
                else
                    cout << "no\n";
                continue;
            }
            if (b == 1) {
                if (pos[a] != (int) 1e9)
                    cout << "yes\n";
                else
                    cout << "no\n";
                continue;
            }
            if (pos[a] != (int)1e9 && pos[a] >= pos[b])
                cout << "yes\n";
            else
                cout << "no\n";
        } else {
            int d;
            cin >> d;
            if (d == 1) {
                cout << cur + 1 << "\n";
                continue;
            }
            if (pos[d] == (int) 1e9)cout << "1\n";
            else cout << 1 + cur - pos[d] << "\n";
        }
    }
    return 0;
}
#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...