#include #include #include #include #include #include #include #include #include #include #include #include #include #define D int #define U unsigned using namespace std; D n, m,a, b, d, e, x, y, z; D i, j, k; struct Li { int n; int p; int r; int l; bool leaf; bool fl; vector near; bool operator<(const Li &obj)const { return n < obj.n; } }; int main() { D t; queue que; vector
  • tr; Li li = {}; cin >> a; li.n = 0; li.p = -1; li.r = 0; li.leaf = true; tr.push_back(li); for (i = 1; i < a; i++) { cin >> li.p >> li.n; li.n--; li.p--; tr.push_back(li); } sort(begin(tr),end(tr)); for (i = 1; i < a; i++) { tr[i].r = tr[tr[i].p].r + 1; tr[i].near.push_back(tr[i].p); tr[tr[i].p].near.push_back(i); if (tr[tr[i].p].leaf) tr[tr[i].p].leaf = false; tr[i].leaf = true; } for (i = 0; i < a; i++) { if (tr[i].leaf) que.push(i); } while (!que.empty()) { t = que.front(); que.pop(); tr[t].fl = true; for (auto z : tr[t].near) { if (!tr[z].fl) { tr[z].fl = true; tr[z].l = tr[t].l + 1; que.push(z); } } } for (auto z : tr) cout << min(z.r, z.l) << endl; }