Submission #1224579

#TimeUsernameProblemLanguageResultExecution timeMemory
1224579SpyrosAlivInside information (BOI21_servers)C++20
0 / 100
13 ms4420 KiB
#include <bits/stdc++.h>
using namespace std;

const int MN = 120005;
const int MQ = 120005;
int n, q;
vector<vector<int>> tree(MN);
vector<int> par(MN, 0), idx(MN, 0);

int find_highest(int u, bool dec, int targ = -1) {
    int lst = idx[u];
    int curr = u;
    while (true) {
        if (curr == targ || par[curr] == 0 || (dec && idx[curr] > lst) || (!dec && idx[curr] < lst)) {
            return curr;
        }
        lst = idx[curr];
        curr = par[curr];
    }
    return curr;
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> q;
    for (int qq = 1; qq <= n + q - 1; qq++) {
        char s; cin >> s;
        if (s == 'Q') {
            int u, v; cin >> u >> v;
            int a = find_highest(u, false);
            int b = find_highest(v, true, a);
            if (a == b) {
                cout << "yes\n";
            }
            else cout << "no\n";
        }
        else if (s == 'S') {
            int a, b; cin >> a >> b;
            if (a > b) swap(a, b);
            idx[b] = qq;
            par[b] = a;
        }
        assert(s != 'C');
    }
}
#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...