func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxN = 1000009;   map<string, int> mapa;   int n, m, k, a, parent[maxN], used[maxN], rozmiar[maxN], centr[maxN], q;   vector<int> graf[maxN];   string s, s1;   void DFS(int start) {     used[start] = 1;     for (int i = 0; i < graf[start].size(); i++) {       if (!used[graf[start][i]]) {         DFS(graf[start][i]);         rozmiar[start] += rozmiar[graf[start][i]];       }     }     rozmiar[start]++;     for (int i = 0; i < graf[start].size(); i++) {       if (graf[start][i] != parent[start]) {         if (rozmiar[graf[start][i]] > rozmiar[start] / 2) {           if (rozmiar[start] - rozmiar[centr[graf[start][i]]] <=               rozmiar[start] / 2)             centr[start] = centr[graf[start][i]];           else {             int x = parent[centr[graf[start][i]]];             while (1) {               if (rozmiar[start] - rozmiar[x] <= rozmiar[start] / 2) {                 centr[start] = x;                 break;               }               x = parent[x];             }           }         }       }     }     if (centr[start] == 0) centr[start] = start;   }   int main() {     scanf( %d%d , &n, &q);     for (int i = 2; i <= n; i++) {       scanf( %d , &a);       parent[i] = a;       graf[i].push_back(a);       graf[a].push_back(i);     }     DFS(1);     for (int i = 0; i < q; i++) {       scanf( %d , &a);       printf( %d n , centr[a]);     }     return 0;   }   