func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, m;   vector<int> g[100001];   bool is_centroid[100001];   int centroid_parent[100001];   int mn[100001];   int sz[100001];   int level[100001];   int centroid_root;   map<pair<int, int>, int> dist;   void dfs(int nd, int p, int c) {     sz[nd] = 1;     if (p == c) {       level[nd] = 0;     } else {       level[nd] = level[p] + 1;     }     dist[make_pair(nd, c)] = level[nd] + 1;     for (int i = 0; i < g[nd].size(); i++) {       int z = g[nd][i];       if (z != p && !is_centroid[z]) {         dfs(z, nd, c);         sz[nd] += sz[z];       }     }   }   int pd;   int find_centroid(int u, int ts) {     for (int i = 0; i < g[u].size(); i++) {       int z = g[u][i];       if (is_centroid[z] || sz[z] > sz[u]) continue;       if (sz[z] > ts / 2) return find_centroid(z, ts);     }     return u;   }   int get_centroid(int nd, int p) {     dfs(nd, p, p);     int u = find_centroid(nd, sz[nd]);     is_centroid[u] = true;     centroid_parent[u] = p;     for (int i = 0; i < g[u].size(); i++) {       int z = g[u][i];       if (!is_centroid[z]) {         get_centroid(z, u);       }     }     return u;   }   void centroid_decompose() {     fill(is_centroid, is_centroid + 100001, false);     centroid_root = get_centroid(1, -1);   }   void debug() {     for (int i = 1; i <= n; i++) {       cout << i <<     << centroid_parent[i] <<     << mn[i] << endl;     }   }   void redify(int u) {     int x = u;     while (u != -1) {       mn[u] = min(dist[make_pair(x, u)], mn[u]);       u = centroid_parent[u];     }   }   int solve(int u) {     int res = INT_MAX / 3;     int x = u;     while (u != -1) {       res = min(res, dist[make_pair(x, u)] + mn[u]);       u = centroid_parent[u];     }     return res;   }   int main() {     int u, v;     scanf( %d %d , &n, &m);     for (int i = 0; i < n - 1; i++) {       scanf( %d %d , &u, &v);       g[u].push_back(v);       g[v].push_back(u);     }     fill(mn, mn + 100001, INT_MAX / 3);     centroid_decompose();     redify(1);     while (m--) {       scanf( %d %d , &u, &v);       if (u == 1) {         redify(v);       } else {         printf( %d n , solve(v));       }     }     return 0;   }   