6686 2023. 12. 16 14:48:52 111 Színes fa cpp17 Elfogadva 50/50 238ms 90212 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define double long double

#define pii pair<int, int>

signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
#ifdef CB
	freopen("be2.txt", "r", stdin);
//	freopen("out.txt", "w", stdout);
#endif
	int N;
	cin >> N;
	vector<vector<int>> g(N + 1);
	for (int i = 2; i <= N; i++) {
		int a;
		cin >> a;
		g[a].push_back(i);
	}
	int M = N;
	auto dfs1 = [&](auto dfs1, int i, int r) -> int {
		int u = 1;
		for (int j : g[i]) {
			u += dfs1(dfs1, j, r + 1);
		}
		M = min(M, r + u);
		return u;
	};
	dfs1(dfs1, 1, 0);
	set<int> s;
	for (int i = 1; i <= M; i++) {
		s.insert(i);
	}
	vector<int> a(N + 1);
	auto dfs2 = [&](auto dfs2, int i) -> void {
		if (a[i]) {
			s.erase(a[i]);
		}
		for (int j : g[i]) {
			a[j] = s.empty() ? 0 : *s.begin();
			dfs2(dfs2, j);
		}
		if (a[i]) {
			s.insert(a[i]);
		}
	};
	a[1] = 1;
	dfs2(dfs2, 1);
	cout << M << '\n';
	for (int i = 1; i <= N; i++) {
		cout << max(a[i], 1ll) << ' ';
	}
	cout << '\n';
	return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 50/50
1 Elfogadva 0/0 3ms 1828 KiB
2 Elfogadva 0/0 6ms 2988 KiB
3 Elfogadva 1/1 3ms 2232 KiB
4 Elfogadva 4/4 3ms 2444 KiB
5 Elfogadva 5/5 238ms 90212 KiB
6 Elfogadva 2/2 128ms 24016 KiB
7 Elfogadva 3/3 119ms 24492 KiB
8 Elfogadva 2/2 104ms 23768 KiB
9 Elfogadva 2/2 93ms 23244 KiB
10 Elfogadva 2/2 93ms 23756 KiB
11 Elfogadva 2/2 127ms 25444 KiB
12 Elfogadva 2/2 178ms 27072 KiB
13 Elfogadva 2/2 190ms 27812 KiB
14 Elfogadva 2/2 151ms 28024 KiB
15 Elfogadva 2/2 146ms 28500 KiB
16 Elfogadva 2/2 128ms 28532 KiB
17 Elfogadva 2/2 140ms 29080 KiB
18 Elfogadva 2/2 170ms 29368 KiB
19 Elfogadva 2/2 153ms 29632 KiB
20 Elfogadva 2/2 177ms 30048 KiB
21 Elfogadva 2/2 146ms 31064 KiB
22 Elfogadva 2/2 152ms 32852 KiB
23 Elfogadva 2/2 194ms 45076 KiB
24 Elfogadva 3/3 236ms 60836 KiB