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/