51092023-04-17 18:20:50rmlanKülönböző katicákcpp14Wrong answer 10/10096ms39228 KiB
#include<bits/stdc++.h>
using namespace std;

int n;
bool jo=1;
vector<int> p,m;
vector<pair<int, int> > l,e;
vector<vector<int>> g;

void dfs1(int u){
    for(int v:g[u]){
        dfs1(v);
        e.push_back({v,u});
        if(l[u].first == 0 && l[u].second == 1e6) continue;

        l[v].first = max(max(l[v].first, l[u].first-1),0);
        l[v].second = min(l[v].second, l[u].second+1);
        if(l[v].second%2 == l[u].second%2 || l[v].first > l[v].second) jo=0;
    }
}

int main(){
    pair<int, int> df = {0,1e6};
    cin >> n;
    p.resize(n+1);
    l.resize(n+1);
    g.resize(n+1);
    m.resize(n+1);


    for(int i = 1; i <= n; i++){
        l[i] = {0, 1e6};
        cin>>p[i];
        g[p[i]].push_back(i);

    }
    for(int i = 1; i <= n; i++){
        cin >> m[i];
        if(m[i] != -1) l[i]={m[i], m[i]};
    }
    dfs1(1);
    reverse(e.begin(), e.end());
    for(pair<int, int> pa:e){
        int fi=pa.first,se=pa.second;
        if(l[se]!=df && l[fi]!=df &&l[se].second%2 == l[fi].second%2) jo=0;
        l[se].first=max(max(l[se].first, l[fi].first-1),0);
        l[se].second=min(l[se].second, l[fi].second+1);
        if(l[se].first > l[se].second) jo = 0;
    }
    dfs1(1);

    if(!jo){
        cout << "NEM";
        return 0;
    }
    cout << "IGEN\n";

    for(int i = 1; i <= n; i++){
        if(l[1] == df){
            cout << m[p[i]]+1 << " ";
            m[i] = m[p[i]]+1;
            continue;
        }
        cout << l[i].second << " ";
    }
/*for(pair<int, int> a:l){
        cout << a.first <<" " << a.second<< endl;
    }*/
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted3ms1748 KiB
2Accepted3ms1992 KiB
3Wrong answer75ms16648 KiB
subtask210/10
4Accepted64ms15488 KiB
5Accepted72ms16620 KiB
6Accepted78ms17640 KiB
7Accepted86ms18720 KiB
subtask30/15
8Accepted79ms38004 KiB
9Accepted79ms38016 KiB
10Wrong answer96ms39228 KiB
11Wrong answer90ms38640 KiB
12Wrong answer89ms37744 KiB
13Wrong answer89ms38776 KiB
14Accepted86ms37396 KiB
subtask40/35
15Accepted3ms3812 KiB
16Wrong answer3ms3772 KiB
17Wrong answer3ms4024 KiB
18Wrong answer3ms4056 KiB
19Wrong answer3ms4056 KiB
20Wrong answer3ms4312 KiB
21Wrong answer3ms4444 KiB
22Wrong answer3ms4392 KiB
subtask50/40
23Accepted79ms19224 KiB
24Accepted71ms19872 KiB
25Wrong answer86ms20244 KiB
26Wrong answer79ms19500 KiB
27Wrong answer79ms19336 KiB
28Wrong answer83ms20032 KiB
29Wrong answer83ms19992 KiB
30Wrong answer79ms19660 KiB
31Wrong answer81ms19460 KiB
32Wrong answer82ms19636 KiB
33Wrong answer89ms20228 KiB