5111 2023. 04. 17 22:46:26 nmarci Különböző katicák cpp11 Elfogadva 100/100 87ms 32352 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 Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 4ms 6664 KiB
2 Elfogadva 4ms 6856 KiB
3 Elfogadva 71ms 13400 KiB
subtask2 10/10
4 Elfogadva 61ms 12828 KiB
5 Elfogadva 68ms 13632 KiB
6 Elfogadva 75ms 14444 KiB
7 Elfogadva 79ms 14848 KiB
subtask3 15/15
8 Elfogadva 68ms 31644 KiB
9 Elfogadva 67ms 31680 KiB
10 Elfogadva 87ms 32352 KiB
11 Elfogadva 81ms 31788 KiB
12 Elfogadva 82ms 31344 KiB
13 Elfogadva 83ms 32244 KiB
14 Elfogadva 79ms 31232 KiB
subtask4 35/35
15 Elfogadva 4ms 8444 KiB
16 Elfogadva 4ms 8564 KiB
17 Elfogadva 4ms 8840 KiB
18 Elfogadva 4ms 9076 KiB
19 Elfogadva 4ms 9060 KiB
20 Elfogadva 4ms 8960 KiB
21 Elfogadva 4ms 9096 KiB
22 Elfogadva 4ms 9192 KiB
subtask5 40/40
23 Elfogadva 74ms 15604 KiB
24 Elfogadva 64ms 15144 KiB
25 Elfogadva 67ms 14756 KiB
26 Elfogadva 74ms 15716 KiB
27 Elfogadva 74ms 15736 KiB
28 Elfogadva 79ms 16052 KiB
29 Elfogadva 79ms 16276 KiB
30 Elfogadva 75ms 16156 KiB
31 Elfogadva 75ms 15972 KiB
32 Elfogadva 79ms 16140 KiB
33 Elfogadva 82ms 16436 KiB