fork download
  1. #include <iostream>
  2. #include <map>
  3. #include <vector>
  4.  
  5. using namespace std;
  6. struct data {
  7. vector<data> vd;
  8. vector<int> vi;
  9. };
  10.  
  11. map<int, int> mp;
  12.  
  13. // return value have sum, current depth
  14. void solve(data d, int depth = 0) {
  15.  
  16.  
  17. int sum = 0;
  18.  
  19. for(int i = 0; i < d.vi.size(); ++i) sum += d.vi[i];
  20.  
  21. for(data dt: d.vd) {
  22. solve(dt, depth+1);
  23. }
  24.  
  25. mp[depth] += sum;
  26. return;
  27.  
  28. }
  29.  
  30. int main_(data d) {
  31. solve(d);
  32. int n = mp.size();
  33. int res = 0;
  34. for(int i = 0; i < n; ++i)
  35. res += (n-i) * mp[i];
  36. return res;
  37. }
  38.  
  39.  
  40. data makeData() {
  41. data d;
  42. d.vi.push_back(7);
  43. d.vi.push_back(1);
  44.  
  45. data d2;
  46. d2.vd.push_back(d);
  47. d2.vi.push_back(6);
  48. d2.vi.push_back(2);
  49.  
  50. data d3;
  51. d3.vi.push_back(5);
  52. d3.vd.push_back(d2);
  53. return d3;
  54. }
  55.  
  56. data makeData2() {
  57.  
  58. data d;
  59. d.vi.push_back(1);
  60. d.vi.push_back(1);
  61.  
  62. data d2;
  63. d2.vi.push_back(1);
  64. d2.vi.push_back(1);
  65.  
  66. data d3;
  67. d3.vi.push_back(2);
  68. d3.vd.push_back(d);
  69. d3.vd.push_back(d2);
  70. return d3;
  71. }
  72.  
  73. int main() {
  74.  
  75. data d = makeData();
  76. cout << main_(d) << endl;
  77.  
  78. // resetting map to process next input
  79. mp.clear();
  80.  
  81. d = makeData2();
  82. cout << main_(d) << endl;
  83. return 0;
  84.  
  85. }
Success #stdin #stdout 0s 15256KB
stdin
Standard input is empty
stdout
39
8