제출 #562732

#제출 시각아이디문제언어결과실행 시간메모리
562732anubhavdharCat in a tree (BOI17_catinatree)C++14
100 / 100
140 ms15540 KiB
#include<bits/stdc++.h> #define ll long long #define pb push_back #define mp make_pair #define pii pair<int, int> #define pll pair<ll, ll> #define ff first #define ss second #define vi vector<int> #define vl vector<ll> #define vii vector<pii> #define vll vector<pll> #define FOR(i,N) for(i=0;i<(N);++i) #define FORe(i,N) for(i=1;i<=(N);++i) #define FORr(i,a,b) for(i=(a);i<(b);++i) #define FORrev(i,N) for(i=(N);i>=0;--i) #define F0R(i,N) for(int i=0;i<(N);++i) #define F0Re(i,N) for(int i=1;i<=(N);++i) #define F0Rr(i,a,b) for(ll i=(a);i<(b);++i) #define F0Rrev(i,N) for(int i=(N);i>=0;--i) #define all(v) (v).begin(),(v).end() #define dbgLine cerr<<" LINE : "<<__LINE__<<"\n" #define ldd long double using namespace std; const int Alp = 26; const int __PRECISION = 9; const int inf = 1e9 + 8; const ldd PI = acos(-1); const ldd EPS = 1e-7; const ll MOD = 1e9 + 7; const ll MAXN = 2e5 + 5; const ll ROOTN = 640; const ll LOGN = 18; const ll INF = 1e18 + 1022; int N, D; vector<int> dep(MAXN), dis(MAXN), g[MAXN]; void dfs(int a, int p = -1, int d = D){ if(dis[a] >= d){ return; } dis[a] = d; for(int b : g[a]){ if(p != b){ dfs(b, a, d - 1); } } } signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin>>N>>D; F0Re(i, N-1) { int j; cin>>j; g[i + 1].pb(j + 1); g[j + 1].pb(i + 1); dep[i + 1] = dep[j + 1] + 1; } if(D >= N) { cout<<"1\n"; exit(0); } if(D == 1) { cout<<N<<'\n'; exit(0); } // dbgLine; vi V(N); iota(all(V), 1); sort(all(V), [&](int a, int b){return dep[a] > dep[b];}); int ans = 0; for(int u : V){ if(dis[u]){ continue; } ++ans; dfs(u); } cout << ans << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...