4997 2023. 04. 08 16:43:44 TomaSajt Különböző katicák cpp17 Accepted 100/100 89ms 36176 KiB
#include <bits/stdc++.h>
using namespace std;

vector<vector<int>> subordinates;
vector<int> boss, spots, parity, range_start, range_end;
bool impossible = false;

void range_dfs(int u) {
  for (int v : subordinates[u]) {
    range_dfs(v);
    range_start[u] = max(range_start[u], range_start[v] - 1);
    range_end[u] = min(range_end[u], range_end[v] + 1);
    if (parity[u] == -1 && parity[v] != -1)
      parity[u] = !parity[v];
    if (parity[u] != -1 && parity[u] == parity[v])
      impossible = true;
  }
  if (range_start[u] > range_end[u])
    impossible = true;
}

void fill_dfs(int u) {
  if (spots[u] == -1) {
    int bs = spots[boss[u]];
    spots[u] = bs + 1 <= range_end[u] ? bs + 1 : bs - 1;
  }
  for (int v : subordinates[u])
    fill_dfs(v);
}

int main() {
  int n;
  cin >> n;
  subordinates.resize(n + 1);
  boss.resize(n + 1);
  spots.resize(n + 1);
  parity.resize(n + 1, -1);
  range_start.resize(n + 1, INT_MIN / 2);
  range_end.resize(n + 1, INT_MAX / 2);
  for (int i = 1; i <= n; i++) {
    cin >> boss[i];
    subordinates[boss[i]].push_back(i);
  }
  for (int i = 1; i <= n; i++) {
    cin >> spots[i];
    if (spots[i] != -1) {
      parity[i] = spots[i] % 2;
      range_start[i] = range_end[i] = spots[i];
    }
  }
  range_dfs(1);
  if (impossible) {
    cout << "NEM";
    return 0;
  }
  fill_dfs(1);
  cout << "IGEN\n";
  for (int i = 1; i <= n; i++)
    cout << spots[i] << ' ';
}
Subtask Sum Test Verdict Time Memory
subtask1 0/0
1 Accepted 3ms 1876 KiB
2 Accepted 3ms 2120 KiB
3 Accepted 74ms 13296 KiB
subtask2 10/10
4 Accepted 64ms 12352 KiB
5 Accepted 70ms 13660 KiB
6 Accepted 75ms 14512 KiB
7 Accepted 82ms 15760 KiB
subtask3 15/15
8 Accepted 71ms 35360 KiB
9 Accepted 71ms 35004 KiB
10 Accepted 89ms 36176 KiB
11 Accepted 86ms 35524 KiB
12 Accepted 82ms 34716 KiB
13 Accepted 83ms 35632 KiB
14 Accepted 79ms 34428 KiB
subtask4 35/35
15 Accepted 3ms 4092 KiB
16 Accepted 3ms 4168 KiB
17 Accepted 3ms 4352 KiB
18 Accepted 3ms 4284 KiB
19 Accepted 3ms 4540 KiB
20 Accepted 3ms 4500 KiB
21 Accepted 3ms 4492 KiB
22 Accepted 3ms 4568 KiB
subtask5 40/40
23 Accepted 74ms 15792 KiB
24 Accepted 65ms 16312 KiB
25 Accepted 68ms 16836 KiB
26 Accepted 75ms 15952 KiB
27 Accepted 75ms 15960 KiB
28 Accepted 81ms 16928 KiB
29 Accepted 79ms 16872 KiB
30 Accepted 78ms 16624 KiB
31 Accepted 76ms 16816 KiB
32 Accepted 79ms 16748 KiB
33 Accepted 83ms 17516 KiB