532021-01-09 15:47:25mraronSzínes facpp11Accepted 50/50202ms61680 KiB
#include<bits/stdc++.h>
using namespace std;

int n;
vector<int> adj[200001];
int lvl[200001], ans[200001];
int c;
void dfs1(int x) {
	if(adj[x].empty()) {
		c=min(lvl[x], c);
	}
	for(auto i:adj[x]) {
		lvl[i]=lvl[x]+1;
		dfs1(i);
	}
}
void dfs2(int x, int cc) {
	cc--;
	cc=max(cc,1);
	ans[x]=cc;
	for(auto i:adj[x]) dfs2(i,cc);
}


int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n;
	for(int i=2;i<=n;++i) {
		int p;
		cin>>p;
		adj[p].push_back(i);
	}
	c=1e9;
	lvl[1]=1;dfs1(1);
	dfs2(1, c+1);
	cout<<c<<"\n";
	for(int i=1;i<=n;++i) cout<<ans[i]<<" \n"[i==n];
	return 0;
}
SubtaskSumTestVerdictTimeMemory
base50/50
1Accepted0/07ms11256 KiB
2Accepted0/010ms11916 KiB
3Accepted1/16ms11260 KiB
4Accepted4/46ms11268 KiB
5Accepted5/590ms47060 KiB
6Accepted2/2166ms25100 KiB
7Accepted3/3152ms26368 KiB
8Accepted2/2153ms27052 KiB
9Accepted2/2131ms27320 KiB
10Accepted2/2144ms29256 KiB
11Accepted2/2160ms32848 KiB
12Accepted2/2177ms35556 KiB
13Accepted2/2179ms37396 KiB
14Accepted2/2173ms38960 KiB
15Accepted2/2165ms40524 KiB
16Accepted2/2180ms41892 KiB
17Accepted2/2193ms43376 KiB
18Accepted2/2173ms44716 KiB
19Accepted2/2188ms46004 KiB
20Accepted2/2173ms47396 KiB
21Accepted2/2175ms48956 KiB
22Accepted2/2202ms50728 KiB
23Accepted2/2179ms55724 KiB
24Accepted3/3184ms61680 KiB