Submission #1068763

#TimeUsernameProblemLanguageResultExecution timeMemory
1068763amirhoseinfar1385참나무 (IOI23_beechtree)C++17
17 / 100
121 ms78804 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); } bool cmp(int a,int b){ return (int)adj[a].size()>(int)adj[b].size(); } int high[maxn]; int calc(int u){ sz[u]=1; int ret=nist[u]; int cnt=0; high[u]=1; for(auto x:adj[u]){ ret|=calc(x); high[u]=max(high[u],high[x]+1); 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(high[u]>3){ vas[u]=1; return 1; } if(high[u]<=2){ if(nist[u]){ vas[u]=1; } return vas[u]; } set<int>fst; for(auto x:adj[u]){ for(auto y:st[x]){ fst.insert(y); } } for(auto y:st[u]){ fst.insert(y); } sort(adj[u].begin(),adj[u].end(),cmp); int f=0; for(int i=1;i<(int)adj[u].size();i++){ for(auto x:st[adj[u][i]]){ if(st[adj[u][i-1]].count(x)==0){ f=1; } } } if(fst!=st[u]){ f=1; } if(f==1){ vas[u]=1; } if(ret){ vas[u]=1; } if(vas[u]){ ret=1; } return ret; } 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]); } calc(0); vector<int>ret(n); 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...