51092023-04-17 18:20:50rmlanKülönböző katicákcpp14Hibás válasz 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;
    }*/
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1748 KiB
2Elfogadva3ms1992 KiB
3Hibás válasz75ms16648 KiB
subtask210/10
4Elfogadva64ms15488 KiB
5Elfogadva72ms16620 KiB
6Elfogadva78ms17640 KiB
7Elfogadva86ms18720 KiB
subtask30/15
8Elfogadva79ms38004 KiB
9Elfogadva79ms38016 KiB
10Hibás válasz96ms39228 KiB
11Hibás válasz90ms38640 KiB
12Hibás válasz89ms37744 KiB
13Hibás válasz89ms38776 KiB
14Elfogadva86ms37396 KiB
subtask40/35
15Elfogadva3ms3812 KiB
16Hibás válasz3ms3772 KiB
17Hibás válasz3ms4024 KiB
18Hibás válasz3ms4056 KiB
19Hibás válasz3ms4056 KiB
20Hibás válasz3ms4312 KiB
21Hibás válasz3ms4444 KiB
22Hibás válasz3ms4392 KiB
subtask50/40
23Elfogadva79ms19224 KiB
24Elfogadva71ms19872 KiB
25Hibás válasz86ms20244 KiB
26Hibás válasz79ms19500 KiB
27Hibás válasz79ms19336 KiB
28Hibás válasz83ms20032 KiB
29Hibás válasz83ms19992 KiB
30Hibás válasz79ms19660 KiB
31Hibás válasz81ms19460 KiB
32Hibás válasz82ms19636 KiB
33Hibás válasz89ms20228 KiB