Submission #1213160

#TimeUsernameProblemLanguageResultExecution timeMemory
1213160yanbPrize (CEOI22_prize)C++20
0 / 100
548 ms133568 KiB
#include <bits/stdc++.h> #define int long long using namespace std; using pii = pair<int, int>; using t3i = tuple<int, int, int>; void dfs(int v, vector<vector<int>> &ch, vector<int> &order) { order.push_back(v); for (int u : ch[v]) dfs(u, ch, order); } signed main() { int n, k, _, q; cin >> n >> k >> _ >> q; vector<int> p1(n); int root1; for (int i = 0; i < n; i++) { cin >> p1[i]; p1[i]--; if (p1[i] == -2) root1 = i; } vector<int> p2(n); int root2; for (int i = 0; i < n; i++) { cin >> p2[i]; p2[i]--; if (p2[i] == -2) root2 = i; } vector<vector<int>> ch1(n); for (int i = 0; i < n; i++) { if (i != root1) ch1[p1[i]].push_back(i); } vector<vector<int>> ch2(n); for (int i = 0; i < n; i++) { if (i != root2) ch2[p2[i]].push_back(i); } for (int i = 0; i < k; i++) { cout << (root1 + i) % n + 1 << " "; } cout << endl; vector<int> dr(n); for (int i = 0; i < k - 1; i++) { cout << "? " << (root1 + i + 1) % n + 1 << " " << root1 + 1 << "\n"; } cout << "!" << endl; for (int i = 0; i < k - 1; i++) { int d1a, d1b, d2a, d2b; cin >> d1a >> d1b >> d2a >> d2b; dr[(root1 + i + 1) % n] = d1a + d1b; } while (q--) { int u, v; cin >> u >> v; u--; v--; if (u == v) { cout << "0 0" << "\n"; } else if (u == root1) { cout << dr[v] << " " << dr[v] << "\n"; } else if (v == root1) { cout << dr[u] << " " << dr[u] << "\n"; } else { cout << dr[v] + dr[u] << " " << dr[v] + dr[u] << "\n"; } } cout << flush; }
#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...