39142023-03-05 12:59:41zsomborKülönböző katicákcpp17Hibás válasz 0/10090ms36468 KiB
#include <iostream>
#include <vector>
using namespace std;

int n;
bool lehet = true;
vector <vector <int>> g(1e5 + 1);
vector <int> f(1e5 + 1, 0);
vector <int> p(1e5 + 1, -1);
vector <int> mn(1e5 + 1, -1e9);
vector <int> mx(1e5 + 1, 1e9);
vector <int> par(1e5 + 1, -1);

void dfs1(int x) {
    if (p[x] > -1) {
        mn[x] = mx[x] = p[x];
        par[x] = p[x] % 2;
    }
    for (int i : g[x]) {
        dfs1(i);
        mn[x] = max(mn[x], mn[i] - 1);
        mx[x] = min(mx[x], mx[i] + 1);
        if (par[x] == -1 && par[i] > -1) par[x] = 1 - par[i];
        if (par[x] > -1 && par[i] > -1 && par[x] == par[i]) lehet = false;
    }
    if (mn[x] > mx[x]) lehet = false;
}

void dfs2(int x) {
    if (p[x] == -1) p[x] = (p[f[x]] - 1 >= mn[x] ? p[f[x]] - 1 : p[f[x]] + 1);
    for (int i : g[x]) dfs2(i);
}

int main()
{
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> f[i];
        g[f[i]].push_back(i);
    }
    for (int i = 1; i <= n; i++) cin >> p[i];
    dfs1(1);
    if (!lehet) { cout << "NEM"; return 0; }
    p[1] = (par[1] == -1 ? 0 : mn[1]);
    dfs2(1);
    cout << "IGEN\n";
    for (int i = 1; i <= n; i++) cout << p[i] << " ";
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva7ms10180 KiB
2Elfogadva6ms10388 KiB
3Hibás válasz71ms14356 KiB
subtask20/10
4Hibás válasz64ms14032 KiB
5Hibás válasz71ms14508 KiB
6Hibás válasz75ms15208 KiB
7Hibás válasz82ms15544 KiB
subtask30/15
8Elfogadva72ms35636 KiB
9Elfogadva71ms35324 KiB
10Hibás válasz90ms36468 KiB
11Hibás válasz85ms35928 KiB
12Elfogadva86ms35072 KiB
13Elfogadva86ms35900 KiB
14Hibás válasz81ms34620 KiB
subtask40/35
15Hibás válasz7ms12416 KiB
16Elfogadva7ms12248 KiB
17Elfogadva6ms12380 KiB
18Hibás válasz7ms12364 KiB
19Elfogadva6ms12508 KiB
20Hibás válasz7ms12632 KiB
21Hibás válasz6ms12756 KiB
22Elfogadva6ms12800 KiB
subtask50/40
23Hibás válasz74ms16716 KiB
24Elfogadva65ms16992 KiB
25Elfogadva67ms16984 KiB
26Hibás válasz75ms16804 KiB
27Hibás válasz75ms16800 KiB
28Elfogadva82ms16912 KiB
29Hibás válasz79ms16912 KiB
30Hibás válasz75ms16952 KiB
31Hibás válasz78ms16716 KiB
32Hibás válasz79ms16808 KiB
33Hibás válasz82ms17068 KiB