Submission #677335

#TimeUsernameProblemLanguageResultExecution timeMemory
677335YENGOYANInside information (BOI21_servers)C++17
50 / 100
280 ms41720 KiB
/* //\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\\ \\ // // 271828___182845__904523__53602__ \\ \\ 87___47____13______52____66__24_ // // 97___75____72______47____09___36 \\ \\ 999595_____74______96____69___67 // // 62___77____24______07____66__30_ \\ \\ 35___35____47______59____45713__ // // \\ \\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\// */ #include <iostream> #include <vector> #include <set> #include <map> #include <unordered_map> #include <unordered_map> #include <cmath> #include <climits> #include <algorithm> #include <random> #include <queue> #include <deque> #include <iomanip> #include <string> #include <tuple> #include <bitset> #include <chrono> #include <ctime> #include <fstream> #include <stack> #include <cstdio> using namespace std; using ll = long long; const int N = 1e5 + 5; const ll mod = 1e9 + 7, inf = 1e12; int n, k, timer = 0; vector<vector<pair<int, int>>> gp; vector<vector<int>> up; vector<int> achox, nvazox, d, tin, tout, par, qash; void dfs(int u, int p, int h, int lst) { up[u][0] = p; par[u] = p; tin[u] = ++timer; for (int i = 1; i < 20; ++i) up[u][i] = up[up[u][i - 1]][i - 1]; achox[u] = h; for (pair<int, int>& v : gp[u]) { if (v.first != p) { d[v.first] = d[u] + 1; qash[v.first] = v.second; if (v.second >= lst) dfs(v.first, u, h, v.second); else dfs(v.first, u, u, v.second); } } tout[u] = ++timer; } void dfs1(int u, int p, int h, int lst) { nvazox[u] = h; for (pair<int, int>& v : gp[u]) { if (v.first != p) { if (v.second <= lst) dfs1(v.first, u, h, v.second); else dfs1(v.first, u, u, v.second); } } } bool isAncestor(int u, int v) { return tin[u] > tin[v] && tout[u] < tout[v]; } int lca(int u, int v) { if (isAncestor(u, v)) return v; if (isAncestor(v, u))return u; for (int i = 19; i >= 0; --i) { if (!isAncestor(v, up[u][i])) u = up[u][i]; } return up[u][0]; } void solve() { cin >> n >> k; vector<pair<pair<int, int>, int>> query; gp = vector<vector<pair<int, int>>>(n); vector<vector<int>> upd(n); up = vector<vector<int>>(n, vector<int>(20)); qash = nvazox = tin = tout = par = d = achox = vector<int>(n); vector<pair<pair<int, int>, int>> edg; map<pair<int, int>, int> mp; for (int i = 0; i < n + k - 1; ++i) { char c; cin >> c; if (c == 'S') { int u, v; cin >> u >> v; gp[--u].push_back({ --v, i + 1 }); gp[v].push_back({ u, i + 1 }); //mp[{u, v}] = mp[{v, u}] = i + 1; } else { int a, d; cin >> a >> d; query.push_back({ {--a, --d}, i + 1 }); } } dfs(0, 0, 0, 0); dfs1(0, 0, 0, 1e9); for (pair<pair<int, int>, int> x : query) { int A = x.first.first, D = x.first.second, w = x.second; int l = lca(A, D); int wa = 0, wd = 0; int u = A; for (int i = 19; i >= 0; --i) { if (d[up[u][i]] > d[l]) u = up[u][i]; } if (d[u] > d[l]) wa = qash[u]; u = D; for (int i = 19; i >= 0; --i) { if (d[up[u][i]] > d[l]) u = up[u][i]; } if (d[u] > d[l]) wd = qash[u]; if (A == D) cout << "yes\n"; else if (d[achox[A]] > d[l] || d[nvazox[D]] > d[l]) cout << "no\n"; else if (tin[A] > tin[D] && tout[A] < tout[D]) { if (qash[A] <= w) cout << "yes\n"; else cout << "no\n"; } else if (tin[A] < tin[D] && tout[A] > tout[D]) { bool f = 1; if (wd > w) f = 0; if (f) cout << "yes\n"; else cout << "no\n"; } else if (wa >= wd) { if (qash[A] < w) cout << "yes\n"; else cout << "no\n"; } else cout << "no\n"; } } int main() { ios_base::sync_with_stdio(0); cin.tie(NULL); //int _; cin >> _; while (_--) solve(); }
#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...