109862024-05-01 21:19:10zsomborVállalati ügyeletcpp17Accepted 100/100179ms74116 KiB
#include <iostream>
#include <vector>
using namespace std;

int n, mex = 1;
vector <int> p(3e5, 0);
vector <int> a(3e5, 0);
vector <vector <int>> g(3e5);
vector <int> sz(3e5, 1);
vector <int> cnt(3e5, 0);
vector <int> ans(3e5, 0);

void dfs(int x) {
	for (int i = 0; i < g[x].size();i++) {
		int& y = g[x][i];
		dfs(y);
		sz[x] += sz[y];
		if (sz[y] > sz[g[x][0]]) swap(g[x][0], y);
	}
}

void dfs_del(int x) {
	cnt[a[x]]--;
	for (int i : g[x]) dfs_del(i);
}

void del(int x) {
	mex = 1;
	dfs_del(x);
}

void add(int x) {
	cnt[a[x]]++;
	while (cnt[mex]) mex++;
}

void dfs_add(int x) {
	add(x);
	for (int i : g[x]) dfs_add(i);
}

void solve(int x) {
	for (int i = 1; i < g[x].size(); i++) {
		int& y = g[x][i];
		solve(y);
		del(y);
	}
	if (g[x].size()) solve(g[x][0]);
	for (int i = 1; i < g[x].size(); i++) {
		int& y = g[x][i];
		dfs_add(y);
	}
	add(x);
	ans[x] = mex;
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> p[i];
		g[p[i]].push_back(i);
	}
	for (int i = 1; i <= n; i++) cin >> a[i];
	dfs(1);
	solve(1);
	for (int i = 1; i <= n; i++) cout << ans[i] << " ";
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted16ms27744 KiB
2Accepted107ms36868 KiB
subtask25/5
3Accepted13ms27916 KiB
4Accepted13ms28124 KiB
5Accepted13ms28336 KiB
6Accepted13ms28548 KiB
subtask38/8
7Accepted13ms27916 KiB
8Accepted13ms28124 KiB
9Accepted13ms28336 KiB
10Accepted13ms28548 KiB
11Accepted68ms31040 KiB
12Accepted68ms31180 KiB
13Accepted67ms31168 KiB
14Accepted71ms31172 KiB
subtask412/12
15Accepted13ms27916 KiB
16Accepted13ms28124 KiB
17Accepted13ms28336 KiB
18Accepted13ms28548 KiB
19Accepted104ms72816 KiB
20Accepted107ms73020 KiB
21Accepted114ms73404 KiB
22Accepted118ms73464 KiB
23Accepted108ms73268 KiB
24Accepted108ms73256 KiB
subtask517/17
25Accepted13ms27916 KiB
26Accepted13ms28124 KiB
27Accepted13ms28336 KiB
28Accepted13ms28548 KiB
29Accepted18ms29476 KiB
30Accepted14ms30000 KiB
31Accepted16ms30188 KiB
32Accepted14ms29740 KiB
33Accepted16ms29776 KiB
34Accepted14ms29656 KiB
35Accepted14ms29616 KiB
36Accepted13ms29620 KiB
37Accepted14ms30072 KiB
38Accepted14ms29876 KiB
39Accepted14ms29924 KiB
40Accepted13ms29924 KiB
41Accepted13ms29960 KiB
subtask628/28
42Accepted108ms37020 KiB
43Accepted104ms40468 KiB
44Accepted104ms47472 KiB
45Accepted107ms56396 KiB
46Accepted108ms64368 KiB
47Accepted109ms70644 KiB
48Accepted71ms32320 KiB
49Accepted116ms74116 KiB
50Accepted115ms74088 KiB
subtask730/30
51Accepted12ms30124 KiB
52Accepted104ms38968 KiB
53Accepted13ms27916 KiB
54Accepted13ms28124 KiB
55Accepted13ms28336 KiB
56Accepted13ms28548 KiB
57Accepted68ms31040 KiB
58Accepted68ms31180 KiB
59Accepted67ms31168 KiB
60Accepted71ms31172 KiB
61Accepted104ms72816 KiB
62Accepted107ms73020 KiB
63Accepted114ms73404 KiB
64Accepted118ms73464 KiB
65Accepted108ms73268 KiB
66Accepted108ms73256 KiB
67Accepted18ms29476 KiB
68Accepted14ms30000 KiB
69Accepted16ms30188 KiB
70Accepted14ms29740 KiB
71Accepted16ms29776 KiB
72Accepted14ms29656 KiB
73Accepted14ms29616 KiB
74Accepted13ms29620 KiB
75Accepted14ms30072 KiB
76Accepted14ms29876 KiB
77Accepted14ms29924 KiB
78Accepted13ms29924 KiB
79Accepted13ms29960 KiB
80Accepted108ms37020 KiB
81Accepted104ms40468 KiB
82Accepted104ms47472 KiB
83Accepted107ms56396 KiB
84Accepted108ms64368 KiB
85Accepted109ms70644 KiB
86Accepted71ms32320 KiB
87Accepted116ms74116 KiB
88Accepted115ms74088 KiB
89Accepted163ms36748 KiB
90Accepted179ms36792 KiB
91Accepted165ms36860 KiB
92Accepted179ms36868 KiB
93Accepted118ms47364 KiB
94Accepted112ms56504 KiB
95Accepted116ms65408 KiB
96Accepted104ms40160 KiB
97Accepted108ms41640 KiB
98Accepted108ms44888 KiB
99Accepted109ms39440 KiB
100Accepted104ms43752 KiB
101Accepted112ms51884 KiB