func_code_string: #include <bits/stdc++.h>   struct circle {     double r, x, y;     circle(void) : r(0), x(0), y(0) {}     bool contains(const circle& o) const {       double dx, dy;       dx = o.x - x;       dy = o.y - y;       return (dx * dx + dy * dy <= r * r) && o.r < r;     }   };   circle fences[1024];   circle control[1024];   int depth[1024];   int parent[11][1024];   int control_parent[1024];   int V, n;   int find_parent(const circle& c, const int& ignore) {     int best_j, best, j;     best_j = V;     best = -INT_MAX;     for (j = 0; j < V; ++j) {       if (j != ignore && fences[j].contains(c)) {         if (depth[j] > best) {           best = depth[j];           best_j = j;         }       }     }     return best_j;   }   void build_tree(void) {     int i, j;     for (i = 0; i < V; ++i) {       depth[i] = 1;       for (j = 0; j < V; ++j) {         if (i != j && fences[j].contains(fences[i])) {           ++depth[i];         }       }     }     for (i = 0; i < V; ++i) {       parent[0][i] = find_parent(fences[i], i);     }     for (i = 1; i <= n; ++i) {       control_parent[i] = find_parent(control[i], -1);     }   }   void build_lca(void) {     int lg2, i;     parent[0][V] = V;     for (lg2 = 1; lg2 < 11; ++lg2) {       for (i = 0; i < V; ++i) {         parent[lg2][i] = parent[lg2 - 1][parent[lg2 - 1][i]];       }     }   }   int get_lca(int a, int b) {     int step, lg2;     if (depth[a] < depth[b]) {       std::swap(a, b);     }     for (lg2 = 10, step = 1024; lg2 >= 0; --lg2, step >>= 1) {       if (depth[a] - step >= depth[b]) {         a = parent[lg2][a];       }     }     if (a == b) {       return a;     }     for (lg2 = 10, step = 1024; lg2 >= 0; --lg2, step >>= 1) {       if (parent[lg2][a] != parent[lg2][b]) {         a = parent[lg2][a];         b = parent[lg2][b];       }     }     return parent[0][a];   }   int main(void) {     int i, q;     int control_1, control_2, control_3;     std::cin.tie(0);     std::ios_base::sync_with_stdio(0);     std::cin >> n >> V >> q;     for (i = 1; i <= n; ++i) {       std::cin >> control[i].x >> control[i].y;     }     for (i = 0; i < V; ++i) {       std::cin >> fences[i].r >> fences[i].x >> fences[i].y;     }     build_tree();     build_lca();     for (i = 0; i < q; ++i) {       std::cin >> control_1 >> control_2;       control_1 = control_parent[control_1];       control_2 = control_parent[control_2];       control_3 = get_lca(control_1, control_2);       std::cout << (depth[control_1] + depth[control_2] - 2 * depth[control_3])                 <<   n ;     }     return 0;   }   