1. 程式人生 > 其它 >Solution Of 不會輸的遊戲

Solution Of 不會輸的遊戲

注:\(\oplus\) 為異或符號 ,\(\land\) 表示邏輯與,\(\lor\) 表示邏輯或

這是一道魔改題,為luogu P7841 100%不公平的遊戲 的弱化版

請先了解 \(SG\) 函式的相關內容,否則本文可能不太友好

\(SG\) 函式不瞭解的可以參考博弈論

顯然每棵樹是一個 \(SG\) 遊戲,而整個森林為這些 \(SG\) 遊戲的和

\(SG\) 定理,整個遊戲的 \(SG\) 值為所有 \(SG\) 子游戲的 \(SG\) 值的異或和

\(SG(X)=SG(x_1) \oplus SG(x_2) \oplus ...\oplus SG(x_k)\)

當且僅當 \(SG(X)=0\)

時有先手必敗

考慮如何計算一顆樹的 \(SG\) 值(接下來只對單棵樹分析)

\(SG(u,k)\) 表示狀態 \((u,k)\)\(SG\)

狀態 \((u,k)\) 表示:

「目前選擇的邊的端點中深度最大的為\(u\) ; 從根節點到節點 \(u\) 的路徑上還有 \(k\) 條邊未被選擇」

\(T_u\) 表示節點 \(u\) 的子樹(不包括 \(u\) 自身)

則狀態 \((u,k)\) 可以到達 \(\Big(v_{(v \in T_u)}\ ,k+depth_v-depth_u-1\Big)\)

\(k > 0\) 則狀態\((u,k)\) 還可以到達 \((u,k-1)\)

記狀態 \(X\) 可到達的狀態(後繼狀態)集合為 \(S_X\),則 \(SG(X)=mex\{SG(x)|x \in S_X\}\) (此為定義式,其中 \(mex\) 是對自然數集的運算,表示該自然數集中未出現過的最小自然數)

以下證明一些命題(記 \(\text{leaf}\) 為葉節點集合)

//

命題一\(SG(u,k)=SG(u,k\ \text{mod}\ 2)\) ,即 \(SG(u,?)\) 存在長度為 \(2\) 的迴圈節

對於邊界情況 \(u \in \text{leaf}\) ,顯然有 \(SG(u,0)=0\)\(SG(u,1)=mex\{SG(u,0)\}=1\ ,\ SG(u,2)=mex\{SG(u,1)\}=0\ ,\ ...\ ,\ SG(u,k)=k\ \text{mod}\ 2\)

於是當 \(u \in \text{leaf}\),命題成立

接下來考慮歸納法,試證:若命題對所有 \(v \in T_u\) 成立,則命題對 \(u\) 成立

假設命題對所有 \(v \in T_u\) 成立

則對於所有 \((u,k)\),其後繼狀態為(暫不考慮\((u,k-1)\)\(\big\{(v,k+depth_v-depth_u-1)|v \in T_u\big\}\) ,對確定的 \(u,v\)\(depth_v-depth_u-1\) 固定,那麼 \(depth_v-depth_u-1\) 的奇偶性也固定

則對於奇偶性相同的 \(k_1 , k_2\) ,狀態 \((u,k_1),(u,k_2)\) 後繼狀態的 \(SG\) 值: \(SG(v,k_1+depth_v-depth_u-1)=SG\Big(v\ ,(k_1+depth_v-depth_u-1)\ \text{mod}\ 2\Big)=SG\Big(v\ ,(k_2+depth_v-depth_u-1)\ \text{mod}\ 2\Big)=SG(v,k_2+depth_v-depth_u-1)\)

\(k\ \text{mod}\ 2=0\)\((u,k)\) 後繼狀態 \(SG\) 值集合為 \(A\)\(k\ \text{mod}\ 2=1\)\((u,k)\) 後繼狀態 \(SG\) 值集合為 \(B\)

計算狀態 \((u,?)\)\(SG\) 值:

\(SG(u,0)=mex{A}=a\ ,\ SG(u,1)=mex{(B \cup \{a\})}=b\),顯然 \(b \neq a\),那麼\(SG(u,2)=mex{(A \cup \{b\})}=mex{A}=a\),迴圈發生,命題一證明完畢

//

命題二\(SG(u,0)\oplus SG(u,1)=1\)

對於邊界情況 \(u \in \text{leaf}\) ,顯然有 \(SG(u,0)=0\)\(SG(u,1)=mex\{SG(u,0)\}=1\ ,\ SG(u,2)=mex\{SG(u,1)\}=0\ ,\ ...\ ,\ SG(u,k)=k\ \text{mod}\ 2\)

於是當 \(u \in \text{leaf}\),命題成立

接下來考慮歸納法,試證:若命題對所有 \(v \in T_u\) 成立,則命題對 \(u\) 成立(復讀

假設命題對所有 \(v \in T_u\) 成立

對自然數集 \(X\),定義 \(X\oplus 1=\{x\oplus 1|x\in X\}\)

則對於自然數集 \(X=\{x|\lfloor\frac{x}{2}\rfloor < \text{(const)}\}\),有 \(X \oplus 1=X\)

命題一已證明,那麼借用命題一中的 \(SG\) 集合\(A\)\(B\)

\(B=A\oplus 1\)\(mex{A}=a\)

令自然數集 \(X=\{x|\lfloor\frac{x}{2}\rfloor < \lfloor \frac{a}{2}\rfloor\}\)

則有 \(X \oplus 1=X\ ,\ X \subseteq A\),又由於\(B=A\oplus 1\),所以 \(X \subseteq B\) ,即是說 \(\forall \Big(x \in N \land x \in [0,min\{a,a\oplus 1\})\Big) ,有\Big(x \in A \land x\in B \Big) \tag{@}\)

分類討論:

\(1^{\circ}\)\(a\ \text{mod}\ 2=0\)

\(a \oplus 1 = a+1\)\(\because a \notin A\ \ \therefore (a \oplus 1) \notin (A \oplus 1)\),即 \((a \oplus 1) \notin B\)

\(\because (@) \Rightarrow \forall \Big(x \in N \land x \in [0,a)\Big) ,有 x\in \big(B\cup \{a\}\big)\ \ \ 且顯然\ \ \ a\in \big(B\cup \{a\}\big)\)

\(\therefore mex{\big(B\cup \{a\}\big)}=a+1=a \oplus 1\)

\(2^{\circ}\)\(a\ \text{mod}\ 2=1\)

\(a \oplus 1 = a-1\)\(\because a \notin A\ \ \therefore (a \oplus 1) \notin (A \oplus 1)\),即 \((a \oplus 1) \notin B\)

\(\because (@) \Rightarrow \forall \Big(x \in N \land x \in [0,a \oplus 1)\Big) ,有 x\in \big(B\cup \{a\}\big)\)

\(\therefore mex{\big(B\cup \{a\}\big)}=a-1=a \oplus 1\)

綜上,\(SG(u,0)=mex{A}=a\ ,\ SG(u,1)=mex{(B\cup \{a\})}=(a \oplus 1)\),於是 \(SG(u,0) \oplus SG(u,1)=1\)命題二證明完畢

//

命題三: 記 \(\lfloor\frac{SG(u,0)}{2} \rfloor =f(u)\), 則對於 \(u\) 的所有直系子節點 \(v\)\(f(u)-max\{f(v)\}= 0 或 1\)

仍舊是歸納法

設 節點 \(t\) ,使 \(t\)\(u\) 的直系子節點,且對於 \(u\) 的所有直系子節點 \(v\),有 \(f(t)=max\{f(v)\}\)

延續前文的 \(A,B\) 集合,由於 \(u\) 相對於 \(v\) ,其 \(depth\) 的奇偶性發生變化

\(SG(u,0)=mex{A_u}=a_u\ ,\ SG(v,0)=mex{A_v}=a_v\ ,\ SG(v,1)=mex{(B_v\cup \{a_v\})}\) ,則有 \(\big((A_v\oplus 1)\cup \{a_v\}\big)\subseteq A_u\),即 \((B_v\cup \{a_v\})\subseteq A_u\)

那麼對於 \(u\) 的所有直系子節點 \(v\),有 \((B_v\cup \{a_v\})\subseteq A_u \Rightarrow mex{A_u}\geq mex{(B_v\cup \{a_v\})}=SG(v,1) \Rightarrow f(u) \geq f(v)\),因此 \(f(u) \geq f(t)\) ,也就是說 \(f(u) - f(t) \geq 0\)

接下來證明 \(f(u) - f(t) \leq 1\),即 \(f(u) \leq f(t)+1\)

易發現邊界情況成立,利用歸納法,假設對子樹均成立

那麼發現 \(A_v=\Big[0\ ,max\{a_v,a_v\oplus 1\}\Big]\setminus \{a_v\}\ ,\ B_v=\Big[0\ ,max\{a_v,a_v\oplus 1\}\Big]\setminus \{a_v\oplus 1\}\) (注:\(X\setminus Y=\{x|x \in X \land x \notin Y\}\)

於是 \(\forall \lfloor \frac{x}{2} \rfloor > g(v) 有 x \notin A_v \land x \notin B_v\)

\(\lfloor \frac{x}{2} \rfloor > g(t) \Rightarrow \lfloor \frac{x}{2} \rfloor > g(v)\),所以 \(\forall \lfloor \frac{x}{2} \rfloor > g(t) 有 x \notin A_v \land x \notin B_v\),因此 \(SG(u,0) \leq 1+max\{a_t,b_t\} \Rightarrow f(u) \leq f(t)+1\)

\(f(t)\leq f(u) \leq f(t)+1 \Rightarrow f(u)-f(t)=0或1\)命題三證明完畢

在命題三的證明過程中,可以發現 \(SG(u)\) 只與 \(f(v)=f(t)\) 的節點 \(v\) 有關,因為其他的貢獻都會被這些覆蓋掉

更具體的,由以上三個命題,可以寫出 \(SG(u,0)\) 的計算式:

\[SG(u,0)= \begin{cases} 0 & ,T_u=\varnothing \\ SG(t,0)\oplus 1 & ,\forall v \in T_u \land f(v)=f(t),st\ SG(v,0)=SG(t,0)\\ max\{SG(t,0),SG(t,1)\}+1 & ,\exists v \in T_u \land f(v)=f(t),st\ SG(v,0) \neq SG(t,0) \end{cases} \]

回到開頭,顯然每棵樹是一個 \(SG\) 遊戲,而整個森林為這些 \(SG\) 遊戲的和

那麼對每棵樹求出其 \(SG(root,0)\),令 \(flag=\bigoplus{SG(root,0)}\) (所有根節點 \(SG\) 值的異或和)

則當且僅當 \(flag=0\) 時先手必敗,否則先手必勝

直接做樹形DP,複雜度\(O(n)\)

賽後被參賽者發現了新規律

假設\(\lfloor\frac{SG(root,0)}{2} \rfloor =U\)的樹至少\(K\)個節點

那麼\(\lfloor\frac{SG(u,0)}{2} \rfloor =U+1\)的樹至少要有兩顆不重疊的\(\lfloor\frac{SG(root,0)}{2} \rfloor =U\)的子樹,於是\(\lfloor\frac{SG(u,0)}{2} \rfloor =U+1\)的樹至少有\(2K+1\)個節點,這也就意味著,\(SG\)值是\(log\)級別的,那麼可以直接用\(bitset\)\(mex\)

本文來自部落格園,作者:蒻楊,轉載請註明原文連結:https://www.cnblogs.com/weed-yang/