[模板] 二分圖博弈 && BZOJ2463:[中山市選2009]誰能贏呢?
阿新 • • 發佈:2019-01-20
cout 博弈 增廣路 com log bob 博客 圖. zoj
若起點s∈X不屬於該最大匹配。則先手所轉移到的點y∈Y一定屬於最大匹配(否則s-y是一個匹配,與最大匹配矛盾)。後手沿著最大匹配的邊走即可,終點t(指無法從t再走一步)一定不可能在Y集中(否則,若t在Y集中,s-...-t為一增廣路,與最大匹配矛盾)。因此先手必敗,後手必勝。
若起點s∈X屬於該最大匹配。則將s從圖中刪除,再求圖的最大匹配。若最大匹配數不變,則s還是不屬於某最大匹配,先手必敗。否則該圖的任意最大匹配都包含s,則先手沿著最大匹配的邊走即可,根據上面的分析,先手必勝。
二分圖博弈
BZOJ 1443 遊戲(二分圖博弈) - free-loop - 博客園
定義
1.博弈者人數為兩人,雙方輪流進行決策。
2.博弈狀態(對應點)可分為兩類(狀態空間可分為兩個集合),對應二分圖兩邊(X集和Y集)。任意合法的決策(對應邊)使狀態從一類跳轉到另一類。(正是由於這個性質使得問題可以用二分圖描述)
3.不可以轉移至已訪問的狀態。(不可重復訪問點)
4.無法轉移者判負。
判定
不妨設起點在二分圖的X集中,那麽先手只能從X集移動到Y集,後手只能從Y集移動到X集。一次遊戲過程對應一條路徑 。若最後停留在X集且無法移動則先手負,停留在Y集則後手負。
考慮該二分圖的某個最大匹配。(註意可能存在多個匹配相同的最大匹配)
若起點s∈X屬於該最大匹配。則將s從圖中刪除,再求圖的最大匹配。若最大匹配數不變,則s還是不屬於某最大匹配,先手必敗。否則該圖的任意最大匹配都包含s,則先手沿著最大匹配的邊走即可,根據上面的分析,先手必勝。
BZOJ2463
顯然就是一個二分圖...
n為偶數時, 先手方沿匹配邊走, 後手方只能走非匹配邊. 最後後手一定無法走;
n奇數時, 考慮除了起點外的所有點構成一個完美匹配. 後手只需沿匹配邊走, 那麽先手一定無法走.
Code
#include<iostream>
using namespace std;
//---------------------------------------
int n;
int main(){
while(cin>>n,n){
cout<<((n&1)?"Bob":"Alice")<<'\n';
}
return 0;
}
[模板] 二分圖博弈 && BZOJ2463:[中山市選2009]誰能贏呢?