Submission #314682

#TimeUsernameProblemLanguageResultExecution timeMemory
314682sofapudenCat in a tree (BOI17_catinatree)C++14
100 / 100
234 ms21956 KiB
#include <bits/stdc++.h>

using namespace std;

vector<vector<int>> gra;
queue<int> Q;
vector<bool> vis;
int root = 0, n, d, ans = 0;

int dfs(int x, int p){
	vector<int> und;
	for(int i : gra[x]){
		if(i == p)continue;
		und.push_back(dfs(i,x));
	}
	if(!und.size()){ans++;return 1;}
	sort(und.rbegin(),und.rend());
	int cur = und[0];
	for(int i = 1; i < (int)und.size(); ++i){
		if(cur + und[i] < d)ans--;
		else cur = und[i];
	}
	if(cur >= d){
		cur-=d;
		ans++;
	}
	return cur+1;
}

int main(){
	cin >> n >> d;
	vis.resize(n,false);
	gra.resize(n);
	for(int i = 1; i < n; ++i){
		int a; cin >> a;
		gra[a].push_back(i);
		gra[i].push_back(a);
	}
	dfs(0,0);
	cout << ans << "\n";
}
		
	
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...