Submission #339304

#TimeUsernameProblemLanguageResultExecution timeMemory
339304boykutBirthday gift (IZhO18_treearray)C++14
12 / 100
4048 ms10092 KiB
#include <bits/stdc++.h> using namespace std; vector <int> g[200001]; vector <int> tree[200001]; int pred[200001], deep[200001], a[200001]; void make_tree(int v, int pre = -1) { pred[v] = pre; if (pre != -1) deep[v] = deep[pre] + 1; else deep[v] = 1; for (int to: g[v]) { if (to == pred[v]) continue; tree[v].push_back(to); make_tree(to, v); } } int lca(int a, int b) { while (deep[b] > deep[a]) b = pred[b]; while (deep[a] > deep[b]) a = pred[a]; if (a == b) return a; while (1) { a = pred[a]; b = pred[b]; if (a == b) return a; } return 1; } signed main() { ios::sync_with_stdio(0); cin.tie(0); int n, m, q; cin >> n >> m >> q; for (int i = 0; i < n - 1; i++) { int u, v; cin >> u >> v; g[u].push_back(v); g[v].push_back(u); } for (int i = 1; i <= m; i++) { cin >> a[i]; } make_tree(1); for (int i = 0; i < q; i++) { int t; cin >> t; if (t == 1) { int pos, v; cin >> pos >> v; a[pos] = v; } else { int l, r, v; cin >> l >> r >> v; int ansx = -1, ansy = -1; int LC; bool find = false; for (int x = l; x <= r && !find; x++) { for (int y = x; y <= r && !find; y++) { if (y == x) LC = a[y]; else LC = lca(LC, a[y]); if (LC == v) { ansx = x, ansy = y; find = true; } } } cout << ansx << ' ' << ansy << '\n'; } } return 0; }

Compilation message (stderr)

treearray.cpp: In function 'int main()':
treearray.cpp:21:27: warning: 'LC' may be used uninitialized in this function [-Wmaybe-uninitialized]
   21 |    while (deep[b] > deep[a]) b = pred[b];
      |                     ~~~~~~^
treearray.cpp:60:14: note: 'LC' was declared here
   60 |          int LC;
      |              ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...