Link to this code:
https://cses.fi/paste/5bc8248fdb5ef76dc7de87//* 777 */
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define FAST_IO ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int n;
vector<int> subtree_sz, dist_sum;
vector<vector<int>> adj;
int root_dist_sum(int node, int par, int depth) {
int cnt = depth;
subtree_sz[node] = 1;
for (int child : adj[node]) {
if (child == par) continue;
cnt += root_dist_sum(child, node, depth + 1);
subtree_sz[node] += subtree_sz[child];
}
// cout << node << " " << par << " " << cnt << endl;
return cnt;
}
void treeDP(int node, int par) {
if (node != par) dist_sum[node] = dist_sum[par] + (n - subtree_sz[node]) - subtree_sz[node];
for (int child : adj[node]) {
if (child == par) continue;
treeDP(child, node);
}
}
void solve() {
cin >> n;
adj.resize(n, vector<int>());
subtree_sz.resize(n);
dist_sum.resize(n);
for (int i = 1 ; i < n ; ++i) {
int u, v; cin >> u >> v; u--; v--;
adj[u].push_back(v);
adj[v].push_back(u);
}
int root = 0;
dist_sum[root] = root_dist_sum(root, root, 0);
treeDP(0, 0);
for (int x : dist_sum) cout << x << " ";
}
int32_t main() {
FAST_IO
solve();
}