52892023-04-25 12:59:22ZsofiaKeresztelyKülönböző katicákcpp14Elfogadva 100/10086ms33796 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define pii pair<int, int>
#define fi first
#define se second
vector<pii> iv;
vector<int> p, c, d;
vector<int> odd;
vector<vector<int> > g;
bool op = true;

void dfs1(int v){
    for (int x : g[v]){
        d[x] = d[v] + 1;
        dfs1(x);
        if (!op) return;
        iv[v].fi = max(iv[v].fi, iv[x].fi - 1);
        iv[v].se = min(iv[v].se, iv[x].se + 1);
        if (odd[v] == odd[x] && odd[v] >= 0 || iv[v].se < iv[v].fi){
            op = false;
            return;
        }
        if (odd[x] >=0) odd[v] = 1 - odd[x];
    }
}

void dfs2(int v){
    iv[v].fi = max(iv[v].fi, iv[p[v]].fi - 1);
    iv[v].se = min(iv[v].se, iv[p[v]].se + 1);
    if (odd[v] == odd[p[v]] && odd[v] >= 0 || iv[v].se < iv[v].fi){
        op = false;
        return;
    }
    if (odd[p[v]] >=0) odd[v] = 1 - odd[p[v]];
    for (int x : g[v]){
        dfs2(x);
    }
}

int main()
{
    //freopen("be3.txt", "r", stdin);
    int n;
    cin >> n;
    g.resize(n+1);
    p.resize(n+1);
    d.resize(n+1);
    c.resize(n+1);
    odd.assign(n+1, -1);
    iv.assign(n+1, {0, 1e9});
    for (int i=1; i<=n; i++){
        cin >> p[i];
        g[p[i]].push_back(i);
    }
    for (int i=1; i<=n; i++){
        cin >> c[i];
        if (c[i] >= 0){
            iv[i] = {c[i], c[i]};
            odd[i] = c[i] % 2;
        }
    }
    d[1] = 0;
    dfs1(1);
    if (!op){
        cout << "NEM";
        return 0;
    }
    dfs2(1);
    if (!op){
        cout << "NEM";
        return 0;
    }
    cout << "IGEN\n";
    if (iv[1].se == 1e9){
        for (int i=1; i<=n; i++){
            cout << d[i] << " ";
        }
    }
    else{
        for (int i=1; i<=n; i++){
            if (!iv[i].fi && odd[i]) cout << 1 << " ";
            else cout << iv[i].fi << " ";
        }
    }
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1876 KiB
2Elfogadva3ms2120 KiB
3Elfogadva74ms14156 KiB
subtask210/10
4Elfogadva63ms12924 KiB
5Elfogadva70ms13800 KiB
6Elfogadva75ms15100 KiB
7Elfogadva82ms16356 KiB
subtask315/15
8Elfogadva70ms32944 KiB
9Elfogadva71ms32548 KiB
10Elfogadva86ms33796 KiB
11Elfogadva83ms32960 KiB
12Elfogadva82ms32312 KiB
13Elfogadva85ms33256 KiB
14Elfogadva78ms32048 KiB
subtask435/35
15Elfogadva3ms4000 KiB
16Elfogadva3ms4048 KiB
17Elfogadva3ms3916 KiB
18Elfogadva3ms3916 KiB
19Elfogadva3ms3912 KiB
20Elfogadva3ms4168 KiB
21Elfogadva3ms4376 KiB
22Elfogadva3ms4336 KiB
subtask540/40
23Elfogadva75ms16324 KiB
24Elfogadva65ms17388 KiB
25Elfogadva65ms17460 KiB
26Elfogadva75ms16688 KiB
27Elfogadva75ms16420 KiB
28Elfogadva82ms17460 KiB
29Elfogadva81ms17700 KiB
30Elfogadva78ms17128 KiB
31Elfogadva79ms17128 KiB
32Elfogadva78ms17384 KiB
33Elfogadva86ms18376 KiB