CCCPaste

Untitled

#include 
#include 
#include 
using namespace std;
const int maxn = 2e5 + 10;
typedef long long ll;
int n;
vector graph[maxn];
ll subtree[maxn];
ll dist[maxn];
void subtree_size(int node, int parent, int depth) {
    subtree[node] = 1;
    dist[0] += depth;
    for(int neighbour : graph[node]) {
        if(neighbour != parent) {
            subtree_size(neighbour, node, depth + 1);
            subtree[node] += subtree[neighbour];
        }
    }
}
void dfs(int node, int parent) {
    for(int neighbour : graph[node]) {
        if(neighbour != parent) {
            dist[neighbour] = dist[node] + n - 2 * subtree[neighbour];
            dfs(neighbour, node);
        }
    }
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin >> n;
    
    for(int i = 1; i < n; i++) {
        int a, b;
        cin >> a >> b;
        a--; b--;
        graph[a].push_back(b);
        graph[b].push_back(a);
    }
    subtree_size(0, -1, 0);
    dfs(0, -1);
    for(int i = 0; i < n; i++) {
        cout << dist[i] << " ";
    }
    return 0;
}