私はこのコードを回すことに問題があります:
void dfs(int i = 1) {
static int preorder = 0;
d[i].first = ++preorder;
d[i].second = 1;
for (list<int>::iterator it = tree[i].begin(); it != tree[i].end(); ++it) {
dfs(*it);
d[i].second += d[*it].second;
}
}
反復的なものに。ご覧のとおり、各ノードの事前注文番号とその子孫の数がわかります。メモリ制限のためにそれをしなければなりません(データサイズは最大10 ^ 6です)。
前もって感謝します。