{"problem":{"name":"Normal","description":{"content":"某天 WJMZBMR 学习了一个神奇的算法：树的点分治！ 这个算法的核心是这样的： ```cpp time = 0 Solve(Tree a) {   time += a.size;   if (a.size == 1) return;   else {     select x in a;     delete a[x];   } } ``` ``` 消耗时间 = 0 Solve(树 a)","description_type":"Markdown"},"platform":"Luogu","limit":{"time_limit":1000,"memory_limit":524288},"difficulty":{"LuoguStyle":"P7"},"is_remote":true,"is_sync":true,"sync_url":null,"sign":"LGP10632"},"statements":[{"statement_type":"Markdown","content":"某天 WJMZBMR 学习了一个神奇的算法：树的点分治！\n\n这个算法的核心是这样的：\n\n```cpp\ntime = 0\nSolve(Tree a) {\n  time += a.size;\n  if (a.size == 1) return;\n  else {\n    select x in a;\n    delete a[x];\n  }\n}\n```\n\n```\n消耗时间 = 0\nSolve(树 a)\n  消耗时间 += a 的大小\n  如果 a 中 只有 1 个点\n    退出\n  否则\n    在 a 中选一个点x\n    在 a 中删除点x\n```\n\n那么 $a$ 变成了几个小一点的树，对每个小树递归调用 `Solve`。\n\n我们注意到的这个算法的时间复杂度跟选择的点 $x$ 是密切相关的，如果 $x$ 是树的重心，那么时间复杂度就是 $O(n \\log n)$。\n\nWJMZBMR 决定随机在 $a$ 中选择一个点作为 $x$，Sevenkplus 告诉他这样做的最坏复杂度是 $O(n^2)$，但是 WJMZBMR 就是不信，于是 Sevenkplus 花了几分钟写了一个程序证明了这一点，你也试试看吧。\n\n现在给你一颗树，你能告诉 WJMZBMR 他的算法需要的期望消耗时间吗（以给出的 `Solve` 函数中的为标准）？\n\n## Input\n\n第一行一个整数 $n$，表示树的大小；接下来 $n-1$ 行每行两个整数 $a,b$，表示 $a$ 和 $b$ 之间有一条边。\n\n树的结点从 $0$ 开始编号。\n\n## Output\n\n一行一个浮点数表示答案，并四舍五入到小数点后 $4$ 位。\n\n[samples]\n\n## Note\n\n对于所有的数据，保证 $1\\leq n\\leq 30000$。","is_translate":false,"language":"English"}],"meta":{"iden":"LGP10632","tags":["图论","点分治","多项式","Special Judge","O2优化","期望","快速数论变换 NTT"],"sample_group":[["3\n0 1\n1 2","5.6667"]],"created_at":"2026-03-03 11:09:25"}}