Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include "bits/stdc++.h"
- using namespace std;
- #define all(a) a.begin(), a.end()
- #define int long long
- struct edge {
- int u, a, b;
- edge(int _u, int _a, int _b) : u(_u), a(_a), b(_b) {}
- };
- vector<vector<edge>> gr;
- vector<int> a, b, r;
- void dfs(int v, int p, int dep, int sum_a, vector<int>& stack_sums) {
- r[v] = upper_bound(all(stack_sums), sum_a) - stack_sums.begin();
- for (const edge& u : gr[v]) {
- if (u.u != p) {
- int pref = 0;
- if (!stack_sums.empty()) {
- pref += stack_sums.back();
- }
- stack_sums.push_back(pref + u.b);
- dfs(u.u, v, dep + 1, sum_a + u.a, stack_sums);
- while ((int)stack_sums.size() > dep) {
- stack_sums.pop_back();
- }
- }
- }
- }
- signed main() {
- #ifdef _DEBUG
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- #endif
- ios_base::sync_with_stdio(false);
- cin.tie(nullptr);
- cout.tie(nullptr);
- int t;
- cin >> t;
- while (t--) {
- int n; cin >> n;
- gr.clear(), a.clear(), b.clear(), r.clear();
- a.resize(n), b.resize(n), gr.resize(n), r.resize(n);
- for (int i = 0; i < n - 1; i++) {
- int p;
- cin >> p >> a[i] >> b[i];
- p--;
- gr[p].push_back(edge( i + 1, a[i], b[i]));
- gr[i + 1].push_back(edge( p, a[i], b[i]));
- }
- vector<int> vec;
- dfs(0, -1, 0, 0, vec);
- for (int i = 1; i < n; i++) {
- cout << r[i] << ' ';
- }
- cout << '\n';
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement