52882023-04-25 12:47:46ZsofiaKeresztelyKülönböző katicákcpp14Hibás válasz 10/10087ms36752 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()
{
    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++){
            cout << iv[i].fi << " ";
        }
    }
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1876 KiB
2Elfogadva3ms2068 KiB
3Hibás válasz75ms14928 KiB
subtask210/10
4Elfogadva64ms13952 KiB
5Elfogadva70ms16316 KiB
6Elfogadva76ms18256 KiB
7Elfogadva82ms19664 KiB
subtask30/15
8Elfogadva71ms35852 KiB
9Elfogadva71ms35716 KiB
10Hibás válasz87ms36752 KiB
11Hibás válasz85ms35912 KiB
12Elfogadva82ms35520 KiB
13Elfogadva86ms36248 KiB
14Elfogadva81ms35056 KiB
subtask40/35
15Elfogadva3ms6872 KiB
16Elfogadva3ms6872 KiB
17Elfogadva3ms6996 KiB
18Hibás válasz3ms7008 KiB
19Elfogadva3ms7260 KiB
20Hibás válasz3ms7228 KiB
21Hibás válasz3ms7212 KiB
22Elfogadva3ms7224 KiB
subtask50/40
23Elfogadva75ms19204 KiB
24Elfogadva64ms20244 KiB
25Elfogadva65ms20460 KiB
26Hibás válasz75ms19748 KiB
27Hibás válasz75ms19436 KiB
28Elfogadva81ms20348 KiB
29Hibás válasz81ms20624 KiB
30Hibás válasz79ms19840 KiB
31Hibás válasz76ms19836 KiB
32Hibás válasz78ms19840 KiB
33Hibás válasz83ms20796 KiB