Advertisement
Guest User

Untitled

a guest
Feb 19th, 2019
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.03 KB | None | 0 0
  1. #include <iostream>
  2. #include <queue>
  3. #define MAX 100010
  4. using namespace std;
  5.  
  6. int dp[MAX][2], Sum[MAX];
  7. int BB, i, j, n;
  8.  
  9.  
  10. struct emp{
  11. int id, val, boss;
  12. emp(int i, int v, int b){
  13. id = i; val = v; boss = b;
  14. }
  15. };
  16.  
  17. vector <emp> sons;
  18. vector <int> son_values[MAX];
  19.  
  20.  
  21. int find(int father){
  22. int sum = 0;
  23. for(int k = 0; k < son_values[father].size();k++)
  24. sum += dp[k][0];
  25. //cout << "Sum = "<<sum<<endl;
  26. return sum;
  27. }
  28.  
  29. int findI(int father){
  30. int sum = 0;
  31. for(int k = 0; k < son_values[father].size();k++)
  32. sum += max(dp[k][1],dp[k][0]);
  33. //cout << "Sum = "<<sum<<endl;
  34. return sum;
  35. }
  36.  
  37. int main(){
  38. cin >> n;
  39. cin >> BB;
  40. sons.push_back(emp(0,BB,-1));
  41. for(i=1;i<=n-1;i++){
  42. int boss, val;
  43. cin >> boss >>val;
  44. son_values[boss].push_back(val);
  45. sons.push_back(emp(i,val,boss));
  46. }
  47.  
  48. dp[n-1][1]=BB;dp[n-1][0]=0;
  49. for(i=n-2;i>=0;i--){
  50. dp[i][1]= find(i);
  51. dp[i][0]= findI(i);
  52. }
  53.  
  54. /*for(i=0;i<=n;i++){
  55. for(j=0;j<2;j++){
  56. cout<<dp[i][j]<<" ";
  57. }
  58. cout<<endl;
  59. }*/
  60. return 0;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement