Submission #1094871

#TimeUsernameProblemLanguageResultExecution timeMemory
1094871MateiKing80Prize (CEOI22_prize)C++14
100 / 100
2397 ms551296 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define int ll const int N = 1e6 + 5; vector<int> fii[2][N]; int ti[2][N], to[2][N], lift[2][N][20]; int dist[2][N]; signed main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, k, q, T; cin >> n >> k >> q >> T; int R[2] {}; for(int i = 1; i <= n; i ++) { int p; cin >> p; if(~p) fii[0][p].push_back(i); else R[0] = i; } for(int i = 1; i <= n; i ++) { int p; cin >> p; if(~p) fii[1][p].push_back(i); else R[1] = i; } for(int c = 0; c < 2; c ++) { int t = 0; to[c][0] = N; function<void(int)> dfs = [&](int u) { ti[c][u] = ++ t; for(int j = 1; j < 20; j ++) lift[c][u][j] = lift[c][lift[c][u][j - 1]][j - 1]; for(auto x : fii[c][u]) { lift[c][x][0] = u; dfs(x); } to[c][u] = t; }; dfs(R[c]); } vector<int> p; function<void(int)> dfs = [&](int u) { if(ti[0][u] <= k) p.push_back(u); for(auto x : fii[0][u]) dfs(x); }; dfs(R[0]); for(auto x : p) cout << x << " "; cout << endl; auto anc = [&](int t, int a, int b) { return (ti[t][a] <= ti[t][b] && ti[t][b] <= to[t][a]); }; auto Lca = [&](int t, int a, int b) { if(anc(t, a, b)) return a; if(anc(t, b, a)) return b; for(int j=19; ~j; j --) if(!anc(t, lift[t][a][j], b)) a = lift[t][a][j]; return lift[t][a][0]; }; sort(p.begin(), p.end(), [&](int a, int b) { return ti[1][a] < ti[1][b]; }); for(int i = 1; i < k; i ++) cout << "? " << p[i - 1] << " " << p[i] << endl; cout << "! " << endl; for(int i = 1; i < k; i ++) { int dc, dd, da, db; cin >> dc >> dd >> da >> db; int lca = Lca(1, p[i - 1], p[i]); dist[1][lca] = dist[1][p[i - 1]] - da; dist[1][p[i]] = dist[1][lca] + db; dist[0][p[i]] = dist[0][p[i - 1]] - dc + dd; } vector<array<int, 2>> Q; for(int i = 0; i < T; i ++) { int a, b; cin >> a >> b; Q.push_back({a, b}); } for(auto [a, b] : Q) { for(int c = 0; c < 2; c ++) { int lca = Lca(c, a, b); cout << dist[c][a] + dist[c][b] - dist[c][lca] * 2 << " "; } cout << endl; } }

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:116:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
  116 |     for(auto [a, b] : Q)
      |              ^
#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...