题解
2025-09-16 21:39:16
发布于:广东
2阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5 + 5;
int n, dep[N], dfn[N], cnt = -1;
ll ans[N];
vector<int> vec[N];
inline void dfs(int x)
{
dfn[x] = ++cnt;
reverse(vec[x].begin(), vec[x].end());
for (int t : vec[x])
dep[t] = dep[x] + 1, dfs(t);
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
for (int i = 1, x; i <= n; i++)
cin >> x, vec[x + 1].emplace_back(i);
dfs(n + 1);
cout << n + 1 << '\n';
for (int i = 1; i <= n; i++)
cout << (dep[1] - dep[i]) * (n + 1ll) + (n - dfn[i]) << '\n';
return 0;
}
这里空空如也
有帮助,赞一个