Submission #531927

#TimeUsernameProblemLanguageResultExecution timeMemory
5319274fectaInside information (BOI21_servers)C++17
2.50 / 100
217 ms524292 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define int ll #define ld long double #define pii pair<int, int> #define f first #define s second #define boost() cin.tie(0), cin.sync_with_stdio(0) struct query { int t, u, v, i; }; const int MN = 120005; int n, q, u, v, par[MN], sz[MN]; bitset<MN> b[MN]; query qs[MN * 2]; char c; vector<int> a[MN]; int find(int x) { return x == par[x] ? x : par[x] = find(par[x]); } bool merge(int x, int y) { x = find(x), y = find(y); if (x == y) return false; par[x] = par[y]; sz[y] += sz[x]; return true; } int32_t main() { boost(); cin >> n >> q; for (int i = 1; i <= n; i++) par[i] = i, sz[i] = 1, b[i][i] = 1; for (int i = 1; i < n + q; i++) { cin >> c >> u; if (c != 'C') cin >> v; if (c == 'S') { a[u].push_back(v); a[v].push_back(u); qs[i] = {0, u, v, i}; merge(u, v); b[u] |= b[v]; b[v] |= b[u]; } else if (c == 'Q') { qs[i] = {1, u, v, i}; if (b[u][v]) printf("yes\n"); else printf("no\n"); } else { qs[i] = {2, u, 0, i}; printf("%lld\n", sz[find(u)]); } } 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...