树上删边游戏及其拓展(公平博弈:克朗原理+费森原理)

参考资料

问题描述

在某一棵树上删除一条边,同时删去所有在删除后不再与根相连的部分
双方轮流操作,无法再进行删除者判定为失败
一个游戏中有多棵树,我们把ta们的根都放在地板上,方便之后的处理

在此,我们讨论的将是公平游戏,即双方都可以删除任意的树边
我们称这个游戏为:Green Hachenbush(树上公平删边游戏)

之所以强调是公平博弈,是因为还有另一种删边游戏,是不公平的,参与者双方一方只能删除蓝边,一方只能删除红边,而绿边双方都可以删除

竹子

为了更好地理解树上删边游戏,我们要由浅入深,从简单的情况入手
因此我们引入“竹子”
这里写图片描述
根据上面的游戏规则,拿掉竹子上的某一节,那么此节上面的部分都会被删除
仔细一看,这就是Nim游戏的变形
那么相应的SG函数就非常简单了: SG[x]=x S G [ x ] = x

克朗原理(Colon Principle)

我们把树的形态变的稍微复杂一点,在竹子上加一些分支,就可以得到一棵朴素的树

其实,树上删边游戏就是一个披上了狼皮树皮的Nim游戏
为了说明此问题,我们先介绍克朗原理

克朗原理

对于树上的某一个点,ta的分支可以转化成以这个点为根的一根竹子,这个竹子的长度就是ta各个分支的边的数量的异或和

我们来举个例子?
这里写图片描述

//随意写了一个计算异或和的小程序
#include<cstdio>

using namespace std;

int main()
{
    int n;
    while (scanf("%d",&n)!=EOF)
    {
        int a=0,x;
        for (int i=1;i<=n;i++) scanf("%d",&x),a^=x;
        printf("%d\n",a);
    }
    return 0; 
}

1号树:最后是一条边的竹子,SG=1
2号树:SG=8
这里写图片描述
3号树:SG=4
这里写图片描述

至于具体的证明,由于没大看懂,就不在blog上胡说了

图上删边游戏

通过上面的讨论,我们得到了把树上删边游戏转化成Nim游戏的有力方法
下面就继续升级:图上删边

直接看一个xue微有点复杂的图:
这里写图片描述

我们当然希望把上图也转化成一个树形结构,之后利用克朗原理转化成竹子,变成Nim游戏解决
为了实现这个目标,我们需要另一个原理:费森原理

费森原理

环上的点可以融合,且不改变图的SG值

不是很好理解?没关系,我们从例子入手
可以发现,上图中门是独立于整个大框外的,所以我们从门开始

首先,我们可以把地板上的两个点视为一个,因为地板本身就可以看成是一个大点
这样这扇门就变成一个三角形(一个有三个点的环)
费森原理指出,我们可以把环上一个点等价成一个自环,而这个环又可以变成一条边
这里写图片描述

一般来说
我们可以把一个带有奇数边的环等价成只有一个端点的一条边
偶数边的环等价于一个点

有了这个结论,就简单多了
因此,上图中房子的烟囱和窗户都可以等价成一个点
那我们继续我们的化简:
这里写图片描述

从上面所有的讨论中,我们可以得到启发:
对于博弈的大部分问题,只要SG值相同,就可以互相转化

例题
题解
  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值