Cod sursa(job #1721032)

Utilizator valentin50517Vozian Valentin valentin50517 Data 24 iunie 2016 08:05:47
Problema Suma divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.46 kb
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

vector<int> V[300100];
int N,Q,G[300100],R[300100];
void dfs(int v){
	G[v] = INT_MAX;
	for(auto it : V[v]){
		dfs(it);
		if(G[v] > G[it]) G[v] = G[it],R[v] = R[it];
	}
	if(G[v] > V[v].size()+(v>1)) G[v] = V[v].size()+(v>1), R[v] = v; 
}

int main(){
	cin >> N >> Q;
	for(int i = 2,x;i<=N;i++){cin >> x;V[x].push_back(i);}
	dfs(1);
	for(int x;Q--;){
		cin >> x;
		cout << R[x] << '\n';
	}
	return 0;
}