51082023-04-17 18:03:40rmlanKülönböző katicákcpp14Hibás válasz 10/10089ms39960 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].first%2 == l[u].first%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].first%2 == l[fi].first%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);
    for(pair<int, int> pa:e){
        int fi=pa.first,se=pa.second;
        if(l[se]!=df && l[fi]!=df &&l[se].first%2 == l[fi].first%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;
    }
    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 << " ";
    }
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1880 KiB
2Elfogadva3ms2112 KiB
3Hibás válasz68ms16852 KiB
subtask210/10
4Elfogadva68ms15780 KiB
5Elfogadva74ms17104 KiB
6Elfogadva79ms18120 KiB
7Elfogadva86ms19324 KiB
subtask30/15
8Elfogadva78ms38952 KiB
9Elfogadva79ms38752 KiB
10Hibás válasz86ms39960 KiB
11Hibás válasz81ms39340 KiB
12Hibás válasz75ms38576 KiB
13Hibás válasz79ms39596 KiB
14Elfogadva85ms38248 KiB
subtask40/35
15Elfogadva3ms4560 KiB
16Elfogadva3ms4632 KiB
17Elfogadva3ms4464 KiB
18Hibás válasz3ms4452 KiB
19Hibás válasz3ms4456 KiB
20Hibás válasz3ms4456 KiB
21Hibás válasz3ms4452 KiB
22Hibás válasz3ms4456 KiB
subtask50/40
23Elfogadva78ms19292 KiB
24Elfogadva74ms19948 KiB
25Elfogadva75ms20316 KiB
26Hibás válasz68ms19464 KiB
27Hibás válasz68ms19300 KiB
28Hibás válasz86ms20152 KiB
29Hibás válasz71ms20064 KiB
30Hibás válasz70ms19876 KiB
31Hibás válasz70ms19576 KiB
32Hibás válasz83ms19704 KiB
33Hibás válasz89ms20296 KiB