제출 #42604

#제출 시각아이디문제언어결과실행 시간메모리
42604MatheusLealVBirokracija (COCI18_birokracija)C++14
70 / 100
138 ms24388 KiB
#include <bits/stdc++.h>
#define N 200005
using namespace std;
typedef long long ll;

int n, ini[N], fim[N], tempo,  deep[N], qtd[N];

ll sum[N];

vector<int> grafo[N];

void dfs(int x, int p, int d)
{
	ini[x] = ++tempo;

	deep[x] = d, sum[ini[x]] += d, qtd[ini[x]] ++;

	for(auto v: grafo[x])
	{
		if(v == p) continue;

		dfs(v, x, d + 1);
	}

	fim[x] = tempo;
}

int main()
{
	ios::sync_with_stdio(false); cin.tie(0);

	cin>>n;

	for(int i = 2, a; i <= n; i++)
	{
		cin>>a;

		grafo[i].push_back(a);

		grafo[a].push_back(i);
	}

	dfs(1, 1, 1);

	for(int i = 1; i <= 2*n; i++) sum[i] += sum[i - 1], qtd[i] += qtd[i - 1];

	for(int x = 1; x <= n; x++) cout<<sum[fim[x]] - sum[ini[x] - 1] - (ll)(deep[x] - 1)*(ll)(qtd[fim[x]] - qtd[ini[x] - 1])<<"\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...