Submission #1068645

#TimeUsernameProblemLanguageResultExecution timeMemory
1068645amirhoseinfar1385Beech Tree (IOI23_beechtree)C++17
9 / 100
159 ms58196 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; } set<int>fst; 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; } fst.insert(all[i]); 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(fst!=st[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...