#include #define MAX 100000 int calc(int, int); int lr[MAX][MAX], count[MAX], memo[MAX], ne[MAX], ha[MAX]; int main(void) { int n, i; scanf("%d", &n); for(i = 0; i < n - 1; i++) { int x, y; scanf("%d%d", &x, &y); x--; y--; lr[ count[x] ][x] = y; count[x]++; lr[ count[y] ][y] = x; count[y]++; } calc(0, 0); for(i = 0; i < n; i++) { printf("%d\n", ne[i] < ha[i] ? ne[i] : ha[i]); } return 0; } int calc(int v, int c) { ne[v] = c; memo[v] = 1; int m = MAX, temp; int i; for(i = 0; i < count[v]; i++) { if(memo[ lr[i][v] ] == 0) { temp = calc(lr[i][v], c + 1) + 1; m = (temp < m ? temp : m); } } m = (m == MAX ? 0 : m); ha[v] = m; return m; }