不能有下图的那种情况,即不能同时有两个叶子结点。
将树切分看看对应的k够不够用,然后就可以输出答案了
code:
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<iostream>
#include<string>
#include <set>
//a&3==a%4
using namespace std;
#define ll long long
#define mem(a) memset(a,0,sizeof(a))
const double eps=1e-8;
const int maxn=1000;//须填写
const int inf=0x3f3f3f3f;
int fa[maxn];
int siz[maxn];
int main()
{
int kase;
int n,k;
bool flag;
scanf("%d",&kase);
while(kase--)
{
mem(siz);
mem(fa);
flag=true;
scanf("%d%d",&n,&k);
for(int i=2;i<=n;i++)
scanf("%d",fa+i);
for(int i=1;i<=n;i++)
siz[i]=1;
for(int i=n;i>=1;i--)
{
if(siz[i]>=3)
flag=false;
siz[fa[i]]+=(siz[i]%2);
}
if(flag&&n%2==0&&k>=(n/2-1))
cout << "Bob" << endl;
else
cout << "Alice" << endl;
}
return 0;
}