5108 2023. 04. 17 18:03:40 rmlan Különböző katicák cpp14 Hibás válasz 10/100 89ms 39960 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 Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 1880 KiB
2 Elfogadva 3ms 2112 KiB
3 Hibás válasz 68ms 16852 KiB
subtask2 10/10
4 Elfogadva 68ms 15780 KiB
5 Elfogadva 74ms 17104 KiB
6 Elfogadva 79ms 18120 KiB
7 Elfogadva 86ms 19324 KiB
subtask3 0/15
8 Elfogadva 78ms 38952 KiB
9 Elfogadva 79ms 38752 KiB
10 Hibás válasz 86ms 39960 KiB
11 Hibás válasz 81ms 39340 KiB
12 Hibás válasz 75ms 38576 KiB
13 Hibás válasz 79ms 39596 KiB
14 Elfogadva 85ms 38248 KiB
subtask4 0/35
15 Elfogadva 3ms 4560 KiB
16 Elfogadva 3ms 4632 KiB
17 Elfogadva 3ms 4464 KiB
18 Hibás válasz 3ms 4452 KiB
19 Hibás válasz 3ms 4456 KiB
20 Hibás válasz 3ms 4456 KiB
21 Hibás válasz 3ms 4452 KiB
22 Hibás válasz 3ms 4456 KiB
subtask5 0/40
23 Elfogadva 78ms 19292 KiB
24 Elfogadva 74ms 19948 KiB
25 Elfogadva 75ms 20316 KiB
26 Hibás válasz 68ms 19464 KiB
27 Hibás válasz 68ms 19300 KiB
28 Hibás válasz 86ms 20152 KiB
29 Hibás válasz 71ms 20064 KiB
30 Hibás válasz 70ms 19876 KiB
31 Hibás válasz 70ms 19576 KiB
32 Hibás válasz 83ms 19704 KiB
33 Hibás válasz 89ms 20296 KiB