HDU 6105 Gameia [想法题]

来源:互联网 发布:股指期货模拟交易软件 编辑:程序博客网 时间:2024/05/16 05:36

题意:Alice和Bob玩一个游戏,开始有一颗没有颜色的树,Bob和Alice分别对树进行染色,Alice每次将一个没有颜色的点涂成白色,Bob每次将一个没有颜色的点涂成黑色,并且可以将与涂上黑色的点直接相邻的点变为黑色,假如最后树上存在白色点,Alice赢,否则Bob赢。Bob还有一个特权,可以在任意时候,删除任意一条边。

题解:通过推论发现,当树为奇数点数时,Alice必应,偶数的时候,假如Bob能将树划分为所有都是只有两个点相连的话,Bob赢。

AC代码:

#include<stdio.h>#include<vector>using namespace std;vector<int>vt[505];int size[505];int flag=0;void dfs(int u){int num=0;size[u]=1;for(int i=0;i<vt[u].size();i++){int to=vt[u][i];dfs(to);size[u]+=size[to];if(size[to]%2==1)num++;}if(num>=2)flag=1;}int main(){int T;scanf("%d",&T);while(T--){for(int i=0;i<505;i++)vt[i].clear();int n,k;scanf("%d%d",&n,&k);for(int i=2;i<=n;i++){int f;scanf("%d",&f);vt[f].push_back(i);}flag=0;dfs(1);if(flag==1||n%2==1)printf("Alice\n");else if(n/2-1>k)printf("Alice\n");else printf("Bob\n");}}


原创粉丝点击