func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 4e5 + 9;   struct edge {     int to, nxt;   } e[N * 2];   int hd[N], tot;   void add(int u, int v) {     e[++tot] = (edge){v, hd[u]};     hd[u] = tot;   }   int n, sz[N], msz[N];   void pre(int u, int fa) {     for (int i = hd[u], v; i; i = e[i].nxt)       if ((v = e[i].to) != fa) {         pre(v, u);         sz[u] += sz[v];         if (sz[v] > sz[msz[u]]) msz[u] = v;       }     sz[u]++;   }   int f[N][2], mx[N];   void dfs1(int u, int fa) {     for (int i = hd[u], v; i; i = e[i].nxt)       if ((v = e[i].to) != fa) {         dfs1(v, u);         int tmp = (sz[v] > n / 2 ? f[v][0] : sz[v]);         if (tmp > f[u][0])           f[u][1] = f[u][0], f[u][0] = tmp, mx[u] = v;         else if (tmp > f[u][1])           f[u][1] = tmp;       }   }   int g[N];   void dfs2(int u, int fa) {     for (int i = hd[u], v; i; i = e[i].nxt)       if ((v = e[i].to) != fa) {         int tmp = (n - sz[v] > n / 2 ? g[u] : n - sz[v]);         g[v] = max(g[v], tmp);         if (v == mx[u])           g[v] = max(g[v], f[u][1]);         else           g[v] = max(g[v], f[u][0]);         dfs2(v, u);       }   }   int main() {     scanf( %d , &n);     for (int i = 1, u, v; i < n; i++) scanf( %d%d , &u, &v), add(u, v), add(v, u);     pre(1, 0), dfs1(1, 0), dfs2(1, 0);     for (int i = 1; i <= n; i++) {       bool centroid = 1;       if (sz[msz[i]] > n / 2)         centroid = (sz[msz[i]] - f[i][0] <= n / 2);       else if (n - sz[i] > n / 2)         centroid = (n - sz[i] - g[i] <= n / 2);       cout << centroid <<    ;     }     return 0;   }   