ThegeekKnight16

Ink Colors com Dp

Jun 13th, 2022 (edited)
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.56 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int MAXN = 1e5 + 10;
  4. vector<int> grafo[MAXN];
  5. int dp[MAXN][5], dp2[MAXN][5][5];
  6.  
  7. void dfs(int v)
  8. {
  9.     for (int i = 0; i <= 3; i++) for (int j = 0; j <= 1; j++) dp2[0][i][j] = -1e9;
  10.     dp2[0][0][0] = 0;
  11.  
  12.     for (int i = 0; i < grafo[v].size(); i++)
  13.     {
  14.         int viz = grafo[v][i];
  15.         dfs(viz);
  16.         dp[v][2] += dp[viz][0];
  17.         dp[v][0] = max(dp[v][0], dp[viz][1]+1);
  18.     }
  19.  
  20.     for (int i = 0; i < grafo[v].size(); i++)
  21.     {
  22.         int viz = grafo[v][i];
  23.         for (int q2 = 2; q2 > 0; q2--)
  24.         {
  25.             dp2[i+1][q2][1] = max(dp2[i][q2][1] + dp[viz][0], max(dp2[i][q2-1][1] + dp[viz][2], dp2[i][q2][0] + dp[viz][3]));
  26.             dp2[i+1][q2][0] = max(dp2[i][q2][0] + dp[viz][0], dp2[i][q2-1][0] + dp[viz][2]);
  27.         }
  28.         dp2[i+1][0][1] = max(dp2[i][0][1] + dp[viz][0], dp2[i][0][0] + dp[viz][3]);
  29.         dp2[i+1][0][0] = dp2[i][0][0] + dp[viz][0];
  30.     }
  31.  
  32.     dp[v][1] = dp2[grafo[v].size()][2][1];
  33.     dp[v][3] = dp2[grafo[v].size()][2][0];
  34.     dp[v][0] = max(dp[v][0], dp[v][2]);
  35. }
  36.  
  37. int main()
  38. {
  39.     ios_base::sync_with_stdio(false);
  40.     cin.tie(NULL);
  41.     int N;
  42.     cin >> N;
  43.     for (int i = 2; i <= N; i++)
  44.     {
  45.         int X;
  46.         cin >> X;
  47.         grafo[X].push_back(i);
  48.     }
  49.  
  50.     for (int i = 2; i <= N; i++) if (grafo[i].size() == 1) {dp[i][0] = 0; dp[i][1] = -1e9; dp[i][2] = 0; dp[i][3] = -1e9;}
  51.  
  52.     dfs(1);
  53.  
  54.     int resp = 0;
  55.     //resp = dp[1][0];
  56.     for (auto viz : grafo[1]) resp += dp[viz][0];
  57.     cout << resp << '\n';
  58. }
  59.  
Add Comment
Please, Sign In to add comment