51112023-04-17 22:46:26nmarciKülönböző katicákcpp11Elfogadva 100/10087ms32352 KiB
#include <bits/stdc++.h>

using namespace std;
using ll = long long int;

int p[100100];

vector<int> g[100100];
int f[100100];

pair<int,int> s[100100];

void dfs(int node){
    s[node] = {p[node], p[node]};
    for(auto i : g[node]){
        dfs(i);
        int l = s[i].first, r = s[i].second;
        if(l != -1 && r != -1){
            if(l == 0){
                ++l;
            }
            else{
                --l;
            }
            ++r;
            if(s[node].first == -1){
                s[node] = {l, r};
            }
            else if(s[node].first % 2 != l % 2 || r < s[node].first || l > s[node].second){
                cout << "NEM" << endl;
                exit(0);
            }
            if(p[node] == -1){
                s[node].first = max(s[node].first, l);
                s[node].second = min(s[node].second, r);
            }
        }
    }
}

void c(int node){
    if(p[node] == -1){
        int l = s[node].first, r = s[node].second;
        if(l <= p[f[node]] - 1 && r >= p[f[node]] - 1 && p[f[node]] - 1 >= 0){
            p[node] = p[f[node]] - 1;
        }
        else{
            p[node] = p[f[node]] + 1;
        }
    }
    for(auto i : g[node]){
        c(i);
    }
}

int main(){
    int n;
    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];
    }
    dfs(1);
    if(p[1] == -1){
        p[1] = s[1].first;
    }
    c(1);
    cout << "IGEN" << endl;
    for(int i = 1; i <= n; ++i){
        cout << p[i] << " ";
    }
    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva4ms6664 KiB
2Elfogadva4ms6856 KiB
3Elfogadva71ms13400 KiB
subtask210/10
4Elfogadva61ms12828 KiB
5Elfogadva68ms13632 KiB
6Elfogadva75ms14444 KiB
7Elfogadva79ms14848 KiB
subtask315/15
8Elfogadva68ms31644 KiB
9Elfogadva67ms31680 KiB
10Elfogadva87ms32352 KiB
11Elfogadva81ms31788 KiB
12Elfogadva82ms31344 KiB
13Elfogadva83ms32244 KiB
14Elfogadva79ms31232 KiB
subtask435/35
15Elfogadva4ms8444 KiB
16Elfogadva4ms8564 KiB
17Elfogadva4ms8840 KiB
18Elfogadva4ms9076 KiB
19Elfogadva4ms9060 KiB
20Elfogadva4ms8960 KiB
21Elfogadva4ms9096 KiB
22Elfogadva4ms9192 KiB
subtask540/40
23Elfogadva74ms15604 KiB
24Elfogadva64ms15144 KiB
25Elfogadva67ms14756 KiB
26Elfogadva74ms15716 KiB
27Elfogadva74ms15736 KiB
28Elfogadva79ms16052 KiB
29Elfogadva79ms16276 KiB
30Elfogadva75ms16156 KiB
31Elfogadva75ms15972 KiB
32Elfogadva79ms16140 KiB
33Elfogadva82ms16436 KiB