Submission #244535

#TimeUsernameProblemLanguageResultExecution timeMemory
244535kshitij_sodaniCat in a tree (BOI17_catinatree)C++17
0 / 100
10 ms9728 KiB
#include <bits/stdc++.h> using namespace std; typedef int64_t llo; #define mp make_pair #define pb push_back #define a first #define b second //#define endl '\n' int n,d; int ans=0; set<int> adj[200001]; int vis[200001]; vector<pair<int,int>> cur; void dfs(int no,int par=-1,int levv=0){ cur.pb({levv,no}); for(auto j:adj[no]){ if(j==par){ continue; } dfs(j,no,levv+1); } } vector<int> kk; void dfs2(int no,int par=-1,int levv=0){ vis[no]=1; kk.pb(no); if(levv<d-1){ for(auto j:adj[no]){ if(j==par){ continue; } dfs2(j,no,levv+1); } } } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cin>>n>>d; for(int i=1;i<n;i++){ int aa; cin>>aa; adj[aa].insert(i); adj[i].insert(aa); } dfs(0); sort(cur.begin(),cur.end()); reverse(cur.begin(),cur.end()); for(auto no:cur){ if(vis[no.b]){ continue; } ans+=1; dfs2(no.b); for(auto j:kk){ for(auto ll:adj[j]){ if(adj[ll].find(j)!=adj[ll].end()){ adj[ll].erase(j); } } adj[j].clear(); } kk.clear(); } cout<<ans<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...