Advertisement
Guest User

Untitled

a guest
Oct 20th, 2019
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.93 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <math.h>
  4. #include <vector>
  5. #include <set>
  6. #include <unordered_set>
  7. #include <tuple>
  8. #include <map>
  9. #include <unordered_map>
  10. #include <string>
  11. #include <string.h>
  12. #include <utility>
  13. #include <algorithm>
  14. #include <queue>
  15. #include <deque>
  16. #include <iterator>
  17. #include <stdlib.h>
  18. #include <cstdlib>
  19. #include <bitset>
  20. #include <fstream>
  21. #include <iomanip>
  22.  
  23. using namespace std;
  24.  
  25. typedef unsigned long long ull;
  26. typedef long long ll;
  27. typedef long double ld;
  28. typedef vector<int> vi;
  29. typedef vector<ll> vill;
  30. typedef vector<vi> vvi;
  31. typedef vector<vill> vvill;
  32. typedef pair<int, int> pii;
  33.  
  34. #define rall(a) a.rbegin(), a.rend()
  35. #define all(a) a.begin(), a.end()
  36. #define pb push_back
  37. #define pf push_front
  38. #define fi first
  39. #define se second
  40. #define forn(i, x) for (int i = 0; i < x; ++i)
  41. #define for1(i, x) for (int i = 1; i < x; ++i)
  42.  
  43. using namespace std;
  44.  
  45. vvi g;
  46. vi lamp;
  47. vi dpl;
  48. vi dpr;
  49. vi p;
  50. vector<bool> marker;
  51.  
  52. int dfs (int v) {
  53. marker[v] = 1;
  54. for (int i = 0; i < g[v].size(); ++i) {
  55. int to = g[v][i];
  56. if (!marker[to]) {
  57. p[to] = v;
  58. dpl[to] += dpl[v];
  59. dpr[v] += dfs(to);
  60. }
  61. }
  62. return dpr[v] + lamp[v];
  63. }
  64.  
  65. int main() {
  66. ios_base::sync_with_stdio(false);
  67. cin.tie(nullptr);
  68. cout.tie(nullptr);
  69. int n = 0; cin >> n;
  70. marker.assign(n, false);
  71. g.resize(n);
  72. dpl.resize(n);
  73. dpr.resize(n);
  74. lamp.resize(n);
  75. p.resize(n);
  76. int start = 0;
  77. for (int i = 0; i < n; ++i) {
  78. int tmp, cost; cin >> tmp >> cost;
  79. --tmp;
  80. if (tmp != -1) {
  81. g[i].pb(tmp);
  82. g[tmp].pb(i);
  83. } else start = i;
  84. lamp[i] = cost;
  85. dpl[i] = cost;
  86. }
  87. // dpr[start] = dfs(start) - lamp[v];
  88. dfs(start);
  89. for (int i = 0; i < n; ++i) {
  90. cout << dpl[i] << " " << dpr[i] << endl;
  91. }
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement