Submission #1068638

#TimeUsernameProblemLanguageResultExecution timeMemory
1068638amirhoseinfar1385Beech Tree (IOI23_beechtree)C++17
0 / 100
4 ms19036 KiB
#include "beechtree.h"
#include<bits/stdc++.h>
using namespace std;
const int maxn=200000+10;
int n,m,all[maxn],dp[maxn],vas[maxn],nist[maxn],sz[maxn],tof[maxn];
set<int>st[maxn];
vector<int>adj[maxn];

int dfsch2(int u){
    int ret=dp[u];
    for(auto x:adj[u]){
        int fake=dfsch2(x);
        if(fake==1&&dp[u]==0){
      //      if(u==2){
        //        cout<<"wtf"<<endl;
          //  }
            nist[u]=1;
            ret|=fake;
        }
    }
    return ret;
}

void check(int cl){
    for(int j=0;j<n;j++){
        dp[j]=st[j].count(cl);
    }
    dfsch2(0);
}

int calc(int u){
    sz[u]=1;
    int ret=nist[u];
 /*   int cnt=0;
    for(auto x:adj[u]){
        ret|=calc(x);
        sz[u]+=sz[x];
        if(sz[x]>1){
            cnt++;
            tof[u]=all[x];
            if(tof[x]!=-1&&tof[x]!=tof[u]){
                ret=1;
            }
        }
    }
    if(cnt>1){
        ret=1;
    }*/
    if(ret){
        vas[u]=1;
    }
    return ret;
}

bool cmp(int a,int b){
    return (int)adj[a].size()>(int)adj[b].size();
}

std::vector<int> beechtree(int N, int M, std::vector<int> P, std::vector<int> C)
{
    n=N;
    m=M;
    for(int i=0;i<n;i++){
        tof[i]=-1;
    }
    for(int i=1;i<=n-1;i++){
        adj[P[i]].push_back(i);
        all[i]=C[i];
        if(st[P[i]].count(all[i])!=0){
            nist[P[i]]=1;
        }
        st[P[i]].insert(all[i]);
    }
//    for(int i=1;i<=m;i++){
  //      check(i);
    //}
    calc(0);
    sort(adj[0].begin(),adj[0].end(),cmp);
    vector<int>ret(n);
    int f=0;
    for(int i=1;i<(int)adj[0].size();i++){
        for(auto x:st[adj[0][i]]){
            if(st[adj[0][i-1]].count(x)==0){
                f=1;
            }
        }
    }
    if(f==1){
        vas[0]=1;
    }
    for(int i=0;i<n;i++){
        nist[i]=0;
        ret[i]=(1^vas[i]);
    }
    return ret;
}
#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...