zoukankan      html  css  js  c++  java
  • [模板] 二分图博弈 && BZOJ2463:[中山市选2009]谁能赢呢?

    二分图博弈

    from BZOJ 1443 游戏(二分图博弈) - free-loop - 博客园

    定义

    1.博弈者人数为两人,双方轮流进行决策。
    2.博弈状态(对应点)可分为两类(状态空间可分为两个集合),对应二分图两边(X集和Y集)。任意合法的决策(对应边)使状态从一类跳转到另一类。(正是由于这个性质使得问题可以用二分图描述)
    3.不可以转移至已访问的状态。(不可重复访问点)
    4.无法转移者判负。

    判定

    不妨设起点在二分图的X集中,那么先手只能从X集移动到Y集,后手只能从Y集移动到X集。一次游戏过程对应一条路径 。若最后停留在X集且无法移动则先手负,停留在Y集则后手负。
    考虑该二分图的某个最大匹配。(注意可能存在多个匹配相同的最大匹配)
    若起点s∈X不属于该最大匹配。则先手所转移到的点y∈Y一定属于最大匹配(否则s-y是一个匹配,与最大匹配矛盾)。后手沿着最大匹配的边走即可,终点t(指无法从t再走一步)一定不可能在Y集中(否则,若t在Y集中,s-...-t为一增广路,与最大匹配矛盾)。因此先手必败,后手必胜。
    若起点s∈X属于该最大匹配。则将s从图中删除,再求图的最大匹配。若最大匹配数不变,则s还是不属于某最大匹配,先手必败。否则该图的任意最大匹配都包含s,则先手沿着最大匹配的边走即可,根据上面的分析,先手必胜。

    BZOJ2463-[中山市选2009]谁能赢呢?

    Description

    Problem 2463. -- [中山市选2009]谁能赢呢?

    Solution

    显然就是一个二分图...

    考虑用1*2骨牌覆盖方格, 骨牌相当于一条匹配边.
    n为偶数时, 骨牌恰好覆盖整个棋盘. 整个先手方沿匹配边走, 后手方只能走非匹配边. 最后后手一定无法走;
    n为奇数时, 考虑除了起点外的所有点可以被骨牌覆盖, 也就是构成一个完美匹配. 后手只需沿匹配边走, 那么先手最后一定无法走.

    Code

    #include<iostream>
    using namespace std;
    int n;
    int main(){
    	while(cin>>n,n){
    		cout<<((n&1)?"Bob":"Alice")<<'
    ';
    	}
    	return 0;
    }
    
  • 相关阅读:
    Nginx、PCRE和中文URL(UTF8编码)rewrite路径重写匹配问题
    Nginx 使用中文URL,中文目录路径
    再谈Nginx Rewrite, 中文URL和其它
    事务管理
    commons-dbcp连接池的使用
    JDBC操作简单实用了IOUtils
    JDBC进行处理大文件和批处理
    mysql日期函数(转)
    mysql约束(自己原先总结的有点不准)
    mysql笔记(前面自己写的不标准有些地方)
  • 原文地址:https://www.cnblogs.com/ubospica/p/10295217.html
Copyright © 2011-2022 走看看