Submission #1233960

#TimeUsernameProblemLanguageResultExecution timeMemory
1233960Sir_Ahmed_ImranBeech Tree (IOI23_beechtree)C++17
0 / 100
29 ms10568 KiB
#include "beechtree.h"
#include <bits/stdc++.h>
using namespace std;
#define MAXN 2001
#define nl '\n'
#define ff first
#define ss second
#define ll long long
#define ld long double
#define terminator main
#define pll pair<ll,ll>
#define add insert
#define append push_back
#define pii pair<int,int>
#define all(x) (x).begin(),(x).end()

int dept[MAXN];
int x[MAXN][MAXN];
int s[MAXN][MAXN];
vector<int> d[MAXN];
vector<int> a[MAXN];

vector<int> beechtree(int n, int m, vector<int> p, vector<int> c){
    vector<int> ans(n, 1);
    vector<pii> vec;
    int mx = 0;
    for(int i = 1; i < n; i++){
        dept[i] = dept[p[i]] + 1;
        d[dept[i]].append(i);
        a[p[i]].append(i);
        mx = max(mx, dept[i]);
    }
    d[0].append(0);
    bool b;
    int v, u;
    for(int h = mx; h >= 0; h--){
        for(int i = 0; i < d[h].size(); i++){
            v = d[h][i];
            vec.clear();
            for(auto & j : a[v]){
                if(x[v][c[j]]) ans[v] = 0;
                x[v][c[j]] = j; 
                vec.append({a[j].size(), j});
            }
            if(!ans[v]) continue;
            sort(all(vec));
            for(int j = 1; j < a[v].size(); j++)
                if(!s[vec[j].ss][vec[j - 1].ss])
                    ans[v] = 0;
            if(!a[v].empty()){
                for(auto & j : a[vec.back().ss])
                    ans[v] &= (x[v][c[j]] > 0);
            }
            if(!ans[v]) continue;
            for(int j = 0; j < i; j++){
                v = d[h][i], u = d[h][j];
                if(!ans[u]) continue;
                if(a[v].size() < a[u].size())
                    swap(v, u);
                s[v][u] = 1;
                for(auto & k : a[u]){
                    if(!s[x[v][c[k]]][k])
                        s[v][u] = 0;
                }
                if(a[v].size() == a[u].size())
                    s[u][v] = s[v][u];
            }
        }
    }
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...