Submission #1233927

#TimeUsernameProblemLanguageResultExecution timeMemory
1233927Muhammad_AneeqBeech Tree (IOI23_beechtree)C++17
0 / 100
80 ms48576 KiB
#include "beechtree.h"
#include <vector>
#include <set>
using namespace std;
int const N=2e5+10;
vector<int>nei[N];
int sz[N]={};
int col[N]={};
bool ans[N]={};
void dfs(int u)
{
    sz[u]=1;
    set<int>s;
    bool w=0;
    ans[u]=1;
    for (auto i:nei[u])
    { 
        dfs(i);
        s.insert(col[i]);
        sz[u]+=sz[i];
        ans[u]=(ans[u]&ans[i]);
    }   
    ans[u]=ans[u]&(s.size()==nei[u].size());
    for (auto i:nei[u])
    {
        if (sz[i]>2)
        {
            ans[u]=0;
            return;
        }
        if (sz[i]==2)
        {
            if (w)
            {
                ans[u]=0;
                return ;
            }
            w=1;
            int g=col[i];
            bool er=0;
            for (auto j:nei[i])
                if (s.find(col[j])!=s.end())
                    er=1;
            if (er==0)
            {
                ans[u]=0;
                return;
            }
        }
    }
}
vector<int> beechtree(int N, int M, vector<int> P,vector<int> C)
{
    for (int i=1;i<N;i++)
    {
        nei[P[i]].push_back(i);
        col[i]=C[i];
    }
    dfs(0);
    vector<int>an;
    for (int i=0;i<N;i++)
        an.push_back(ans[i]);
    return an;
}
#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...