2017 Multi-University Training Contest - Team 6 HDU 6105 Gameia(博弈)_ZZZZone的博客-程序员秘密

技术标签: 博弈  HDU  2017-Mult  2017-Multi  



2017 Multi-University Training Contest - Team 6 HDU 6105 Gameia(博弈)


题目链接:
HDU 6105 Gameia

题目大意:
给一棵树, n 个点, n1 条边, 刚开始每个点都没颜色, A可以将一个点涂成白色,B可以把一个点以及与这个点相邻的点(不管染没染过色)全部变成黑色,B有k次机会可以砍断任意一条边。 A先开始, 所有点都被涂过游戏结束, 只要存在一个白色点,B就输。 问最后谁能赢.

解题思路:

  • 首先要知道, B的机会, 如果他要用,那么可以视为在最刚开始就用。
  • 然后是博弈的问题, 比赛的时候学长在写6103字符串那题, 我就在旁边推这个博弈, 画了几个图发现, 对于一条链来说, 只有长度为2的时候B才必胜, 因为链长度为 134. A必胜,如果长度大于4, 那么A一定可以通过染最边上或者边上的第二个使得这条链以 2,3 的长度缩减, 最终变成长度为 34 , 这样又变成了A必胜。 这里不理解的可以自己画一下, 因为AB都绝对聪明, 而且A先手。
    对于一棵树来说, 也是如此, 并且在树上A更占优势, 因为有很多分支点。 所以我就想把这棵树切成两两一段。 看需要次数是否超过k, 还要判断存在切完之后是否存在单点的情况。(如果存在单点, A点一下必胜)。

代码:

/**********************************************
 *Author*        :ZZZZone
 *reated Time*  : 2017/8/10 14:29:50
 *ended  Time*  : 2017/8/10 14:41:02
*********************************************/

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <stack>
using namespace std;
typedef pair<int, int> PII;
typedef long long LL;
typedef unsigned long long ULL;

const int MaxN = 500;
int n, k, tot;
int all, pre[2 * MaxN + 5], last[MaxN + 5], other[2 * MaxN + 5];
bool ok, vis[MaxN + 5];
int ind[MaxN + 5];

void Build(int x, int y) {
    pre[++all] = last[x];
    last[x] = all;
    other[all] = y;
}

void Dfs(int x, int fa) {
    int ed = last[x];
    int cnt = 0;
    while(ed != -1) {
        int dr = other[ed];
        if(dr != fa) {
            Dfs(dr, x);
            if(ind[dr] > 0 || ind[x] > 0) tot++;
            else ind[dr]++, ind[x]++;
        }
        ed = pre[ed];
    }
}

int main()
{
    int T;
    scanf("%d", &T);
    while(T--) {
        all = -1; memset(last, -1, sizeof(last));
        memset(vis, 0, sizeof(vis));
        memset(ind, 0, sizeof(ind));
        scanf("%d%d", &n, &k);
        for(int i = 2; i <= n; i++) {
            int x;
            scanf("%d", &x);
            Build(x, i); Build(i, x);
        }
        ok = 1; tot = 0;
        Dfs(1, 0);
        for(int i = 1; i <= n; i++) if(ind[i] == 0) ok = 0;
        if(tot > k) ok = 0;
        if(ok) printf("Bob\n");
        else printf("Alice\n");
    }
    return 0;
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ZZZZone/article/details/77341887

智能推荐

CCF201312-4 有趣的数(100分)_海岛Blog的博客-程序员秘密

试题编号:201312-4试题名称:有趣的数时间限制:1.0s内存限制:256.0MB问题描述:问题描述  我们把一个数称为有趣的,当且仅当:  1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次。  2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3

pdsh基本使用_zhengf365的博客-程序员秘密

最基本的命令格式:-w TARGET, .....       TARGET用来指示目标主机或目标的过滤条件,该参数不可和-a,-g同时使用,TARGET可以直接使用主机名或主机名列表,如:   pdsh -w node1,node2,node3 datepdsh -w node[1-10] date  其他参数:-x host,host,.

centos6.4 下 virt-manager 使用 nfs存储出现的无权限访问问题解决办法_chenyulancn的博客-程序员秘密

在centos6.4 下使用virt-manager或libvirt 接口启动 nfs 存储上的 虚拟硬盘或者 iso镜像时 出现 “  internal error Process exited while reading console log output: char device redirected to /dev/pts/4     qemu-kvm: -drive file=/v

56-20210402华为海思Hi3516DV300的linux系统下读取TF卡(eMMC模式)_linux c++读写tf卡_南棱笑笑生的博客-程序员秘密

56-20210402华为海思Hi3516DV300的linux系统下读取TF卡(eMMC模式)2021/4/2 15:02https://xueqiu.com/7970718062/159110439官井想开挖掘机来自iPhone发布于2020-09-13 15:18$润和软件(SZ300339)$HiSpark AI Camera套件l 支持鸿蒙OS、LiteOS、Linux系统,方便进行产品的原型验证和快速开发l 板载海思Hi3516DV300芯片,内置双核Cortex-A7.

用 TypeScript 写 React & Redux - 完全指南_react redux typescript_Jay·Yuen的博客-程序员秘密

“这个指南是一个最新的摘要,记录了关于如何用TypeScript 以函数式风格使用React(以及相关生态)最重要的模式和示例。它会使你的代码在从具体实现中进行类型推导时绝对是类型安全的,这样就能减少来自过度类型声明的信息噪音,并更容易写出易于长期维护的正确类型声明。”目标完全的类型安全(支持--strict模式),并且在向应用的下游代码传递时,不会丢失类型信息(比如:缺少类型断言或用 any 来强行使用)使用高级 TypeScript 语言特性(诸如类型推论和控制流分析)来消除类型冗余、使类型.

hibernate主键生成策略_jyangzi5的博客-程序员秘密

hibernate主键生成策略(转) Hibernate为优秀的持久层框架的代表。在传统的JDBC+JavaBean操作中,实体对象都由程序员自己去封装,然后返回。而在Hibernate中,采用对象关系映射『ORM』,大大简化了对数据库的操作. 在数据库的设计和操作中,我们通常会给表建立主键。 主键,可以分为自然主键和代理主键。 ----------------------------...

随便推点

JSON字符串转为java对象_怎么把json字符串转化为一个对象_demo灬的博客-程序员秘密

在日常的java开发中,我们经常会需要接收到其它地方传过来的数据,格式也很多都是通过JSON格式来传递的。所以我们经常需要将JSON格式的数据转换为我们所需要的数据格式,比如javabean形式。对于只有一层的JSON格式的数据转换还是比较简单的。代码如下:String param = &quot;{'leader':'headtearch'}&quot;;JSONObject jsonObject ...

00后,Python自动化工程师,月薪4K到月入2W+!改变真的难吗?_程序员小濠的博客-程序员秘密

有人说世上99%的事情都能用钱解决,但是他们没说,解决剩下的1%,需要更多的钱。    光阴似箭,岁月如流,转眼间我们已经迎来2020年了,总结过去,展望未来,那么,咱们先来总结一下,去年,你赚到钱了么?  三十立什么?四十惑什么?五十知什么?可能很多人依然处于人生的迷茫期,苦于寻找出路却不知从何入手。  当下的大部分普通人,穷尽一生,无非就是在为爱情、事业、家庭而奋斗,又或者仅仅为吃上一口饱饭。我们大多出生于平凡的普通家庭,现实的社会并没有给我们太多选择的余地,时光也可能已经把我们当初锋.

android抖音自动刷新,Android 使用SwipeRefreshLayout控件仿抖音做的视频下拉刷新效果..._衣锦夜行的李公子的博客-程序员秘密

SwipeRefreshLayout(这个控件),我先跟大家介绍一下这个控件:一、SwipeRefreshLayout简单介绍•先看以下官方文档,已有了很详细的描述了。官方文档说明•这里我再大概解释一下:•在竖直滑动时想要刷新页面可以用SwipeRefreshLayout来实现。它通过设置OnRefreshListener来监听界面的滑动从而实现刷新。也可以通过一些方法来设置SwipeRefres...

Springboot jar包读取resources目录下的文件_He Yanbo的博客-程序员秘密

问题由来:最近在跟甲方公司AI训练平台对接docker接口,通过调用springboot提供的docker接口实现对docker的所有日常操作。在做到docker import接口时,由于AI训练平台的镜像比较大,不能直接获取到镜像文件的文件流,所以考虑到了大文件分段传输技术,将AI训练平台的文件通过分段传输过来,然后本地将分段文件保存,传输完毕后再将分段文件整合,实现镜像文件的传输,然后再使用shell脚本进行镜像文件的加载。我将shell脚本放到了resource/shell/目录下,在本地调试的时候是

程序员如何避免“滴滴式裁员”悲剧?_CSDN 程序人生的博客-程序员秘密

作者 | 徐麟责编 | 胡巍巍人工智能学习路线+实战训练https://edu.csdn.net/topic/ai30?utm_source=cxrs_bw滴滴于2月15日正式发表裁员公告,想必很多互联网人的朋友圈都已经被这条消息刷屏了,其中最常见的莫过于下面这张图了:此图一出,广大互联网吃瓜群众不禁后背发凉,四肢无力,头晕眼花,难道传说中的互联网寒潮真的要来了...

推荐文章

热门文章

相关标签