fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define ld long double
  5. #define pb emplace_back
  6. #define mp make_pair
  7. #define all(x) (x).begin(),(x).end()
  8. #define rall(x) (x).rbegin(),(x).rend()
  9. #define inf 0x3f3f3f3f
  10. #define pii pair<int,int>
  11.  
  12. const int N=(int)2e5+5;
  13.  
  14. int n,q;
  15. vector<int> g[N];
  16. int f[N][105];
  17. int a[N];
  18.  
  19. void dfs(int u)
  20. {
  21. for(int v:g[u])
  22. {
  23. dfs(v);
  24. for(int i=1;i<=100;i++)
  25. f[u][i]+=f[v][i];
  26. }
  27. f[u][a[u]]=max(f[u][a[u]],1+f[u][a[u]-1]);
  28. for(int i=1;i<=100;i++)
  29. f[u][i]=max(f[u][i],f[u][i-1]);
  30. }
  31.  
  32. signed main()
  33. {
  34. ios::sync_with_stdio(false);
  35. cin.tie(0);
  36. cout.tie(0);
  37. cin>>n>>q;
  38. for(int i=1;i<=n;i++) cin>>a[i];
  39. for(int i=2;i<=n;i++)
  40. {
  41. int p;
  42. cin>>p;
  43. g[p].pb(i);
  44. }
  45. dfs(1);
  46. while(q--)
  47. {
  48. int x;
  49. cin>>x;
  50. cout<<f[x][100]<<'\n';
  51. }
  52. return 0;
  53. }
  54. /*
  55. 6 3
  56. 8 4 2 7 1 3
  57. 1 1 3 2 3
  58. 1
  59. 3
  60. 4
  61.  
  62. 6 2
  63. 7 5 6 4 3 1
  64. 1 1 3 3 5
  65. 3
  66. 1
  67. */
  68.  
Success #stdin #stdout 0.01s 8428KB
stdin
Standard input is empty
stdout
Standard output is empty