49972023-04-08 16:43:44TomaSajtKülönböző katicákcpp17Elfogadva 100/10089ms36176 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] << ' ';
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1876 KiB
2Elfogadva3ms2120 KiB
3Elfogadva74ms13296 KiB
subtask210/10
4Elfogadva64ms12352 KiB
5Elfogadva70ms13660 KiB
6Elfogadva75ms14512 KiB
7Elfogadva82ms15760 KiB
subtask315/15
8Elfogadva71ms35360 KiB
9Elfogadva71ms35004 KiB
10Elfogadva89ms36176 KiB
11Elfogadva86ms35524 KiB
12Elfogadva82ms34716 KiB
13Elfogadva83ms35632 KiB
14Elfogadva79ms34428 KiB
subtask435/35
15Elfogadva3ms4092 KiB
16Elfogadva3ms4168 KiB
17Elfogadva3ms4352 KiB
18Elfogadva3ms4284 KiB
19Elfogadva3ms4540 KiB
20Elfogadva3ms4500 KiB
21Elfogadva3ms4492 KiB
22Elfogadva3ms4568 KiB
subtask540/40
23Elfogadva74ms15792 KiB
24Elfogadva65ms16312 KiB
25Elfogadva68ms16836 KiB
26Elfogadva75ms15952 KiB
27Elfogadva75ms15960 KiB
28Elfogadva81ms16928 KiB
29Elfogadva79ms16872 KiB
30Elfogadva78ms16624 KiB
31Elfogadva76ms16816 KiB
32Elfogadva79ms16748 KiB
33Elfogadva83ms17516 KiB