Advertisement
ivnikkk

Untitled

Aug 1st, 2022
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.37 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include "bits/stdc++.h"
  3. using namespace std;
  4. #define all(a) a.begin(), a.end()
  5. #define int long long
  6. struct edge {
  7.     int u, a, b;
  8.     edge(int _u, int _a, int _b) : u(_u), a(_a), b(_b) {}
  9. };
  10. vector<vector<edge>> gr;
  11. vector<int> a, b, r;
  12. void dfs(int v, int p, int dep, int sum_a, vector<int>& stack_sums) {
  13.     r[v] = upper_bound(all(stack_sums), sum_a) - stack_sums.begin();
  14.     for (const edge& u : gr[v]) {
  15.         if (u.u != p) {
  16.             int pref = 0;
  17.             if (!stack_sums.empty()) {
  18.                 pref += stack_sums.back();
  19.             }
  20.             stack_sums.push_back(pref + u.b);
  21.             dfs(u.u, v, dep + 1, sum_a + u.a, stack_sums);
  22.             while ((int)stack_sums.size() > dep) {
  23.                 stack_sums.pop_back();
  24.             }
  25.         }
  26.     }
  27. }
  28. signed main() {
  29. #ifdef _DEBUG
  30.     freopen("input.txt", "r", stdin);
  31.     freopen("output.txt", "w", stdout);
  32. #endif
  33.     ios_base::sync_with_stdio(false);
  34.     cin.tie(nullptr);
  35.     cout.tie(nullptr);
  36.     int t;
  37.     cin >> t;
  38.     while (t--) {
  39.         int n; cin >> n;
  40.         gr.clear(), a.clear(), b.clear(), r.clear();
  41.         a.resize(n), b.resize(n), gr.resize(n), r.resize(n);
  42.         for (int i = 0; i < n - 1; i++) {
  43.             int p;
  44.             cin >> p >> a[i] >> b[i];
  45.             p--;
  46.             gr[p].push_back(edge( i + 1, a[i], b[i]));
  47.             gr[i + 1].push_back(edge( p, a[i], b[i]));
  48.         }
  49.         vector<int> vec;
  50.         dfs(0, -1, 0, 0, vec);
  51.         for (int i = 1; i < n; i++) {
  52.             cout << r[i] << ' ';
  53.         }
  54.         cout << '\n';
  55.     }
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement