제출 #569066

#제출 시각아이디문제언어결과실행 시간메모리
569066minhcoolCat in a tree (BOI17_catinatree)C++17
11 / 100
93 ms596 KiB
#include<bits/stdc++.h>
using namespace std;

#define int long long
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define foru(i, l, r) for(int i = l; i <= r; i++)
#define ford(i, r, l) for(int i = r; i >= l; i--)

typedef pair<int, int> ii;
typedef pair<ii, int> iii;
typedef pair<ii, ii> iiii;

const int N = 1e3 + 5;

const int oo = 1e18 + 7, mod = 1e9 + 7;

int n, d;
vector<int> Adj[N];

int dist[N][N];

void dfs(int u, int p, int root){
	for(auto v : Adj[u]){
		if(v == p) continue;
		dist[root][v] = dist[root][u] + 1;
		dfs(v, u, root);
	}
}

void process(){
	cin >> n >> d;
	for(int i = 1; i < n; i++){
		int x;
		cin >> x;
		Adj[x].pb(i);
		Adj[i].pb(x);
	}
	for(int i = 0; i < n; i++){
		dfs(i, i, i);
	}
	int mx = -1;
	for(int i = 0; i < (1LL << n); i++){
		vector<int> vc;
		for(int j = 0; j < n; j++) if(i & (1LL << j)) vc.pb(j);
		bool ck = 1;
		for(auto it : vc){
			for(auto it2 : vc){
				if(it == it2) continue;
				ck &= (dist[it][it2] >= d);
			}
		}
		if(ck) mx = max(mx, (int)vc.size());
	}
	cout << mx;
}

signed main(){
	ios_base::sync_with_stdio(0);
	process();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...