66862023-12-16 14:48:52111Színes facpp17Elfogadva 50/50238ms90212 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ÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/03ms1828 KiB
2Elfogadva0/06ms2988 KiB
3Elfogadva1/13ms2232 KiB
4Elfogadva4/43ms2444 KiB
5Elfogadva5/5238ms90212 KiB
6Elfogadva2/2128ms24016 KiB
7Elfogadva3/3119ms24492 KiB
8Elfogadva2/2104ms23768 KiB
9Elfogadva2/293ms23244 KiB
10Elfogadva2/293ms23756 KiB
11Elfogadva2/2127ms25444 KiB
12Elfogadva2/2178ms27072 KiB
13Elfogadva2/2190ms27812 KiB
14Elfogadva2/2151ms28024 KiB
15Elfogadva2/2146ms28500 KiB
16Elfogadva2/2128ms28532 KiB
17Elfogadva2/2140ms29080 KiB
18Elfogadva2/2170ms29368 KiB
19Elfogadva2/2153ms29632 KiB
20Elfogadva2/2177ms30048 KiB
21Elfogadva2/2146ms31064 KiB
22Elfogadva2/2152ms32852 KiB
23Elfogadva2/2194ms45076 KiB
24Elfogadva3/3236ms60836 KiB