fork(1) download
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4. using ll = long long;
  5.  
  6. ll N = 1e5 + 7;
  7. vector<vector<int>> tree(N);
  8. vector<int> color(N, 0);
  9. vector<int> res(N, -1);
  10.  
  11.  
  12. void dfs(int root, vector<vector<int>> color_level){
  13. color_level[color[root]].push_back(root);
  14.  
  15. if (color_level[color[root]].size() > 1){
  16. res[root] = color_level[color[root]].end()[-2];
  17. }
  18.  
  19. for(auto node: tree[root]){
  20. dfs(node, color_level);
  21. }
  22. }
  23.  
  24. int main(int argc, char const *argv[]){
  25. ios_base::sync_with_stdio(0);cin.tie(NULL);cout.tie(NULL);
  26. #ifndef ONLINE_JUDGE
  27. freopen("inp.txt", "r", stdin);
  28. freopen("out.txt", "w", stdout);
  29. #endif
  30.  
  31. int n, c;
  32. cin>>n>>c;
  33.  
  34. int v;
  35. for (size_t i = 1; i <= n - 1; i++){
  36. cin>>v;
  37. tree[v].push_back(i + 1);
  38. }
  39.  
  40. int co;
  41. for (size_t i = 1; i <= n; i++){
  42. cin>>co;
  43. color[i] = co;
  44. }
  45.  
  46. vector<vector<int>> color_level(N);
  47. dfs(1, color_level);
  48.  
  49. for (size_t i = 1; i <= n; i++){
  50. cout<<res[i]<<" ";
  51. }
  52.  
  53. cout<<"\n";
  54.  
  55. return 0;
  56. }
Runtime error #stdin #stdout 0s 6528KB
stdin
Standard input is empty
stdout
Standard output is empty