訓練記錄PART7
阿新 • • 發佈:2018-12-02
再不更部落格我就……!!!……吃cjb!
T112-2018 Bytedance-MW Wintercamp Selection Contest C
題意:給出一棵 \(N(\leq 10^6)\) 個點的帶邊權的樹。甲乙兩人輪流博弈,每次可以選擇將一條邊 \(e\) 的邊權 \(w_e\) 減一。若減完後變成 \(0\),則割掉不包含根的那個連通塊。雙方執最優策略,問先手是否必勝。如果必勝的話,還要輸出所有可行的第一步刪邊方案。
題解:如果邊權 \(w_e=1\),有一個很簡單的結論:子樹 $sg_x=(sg_{y_1}+1) \oplus (sg_{y_2}+1) \dots $。這個可以用歸納法來證明。
此題中邊權可以大於 \(1\)
連結可參考這裡:([https://blog.csdn.net/acm_cxlove/article/details/7854532)。
主要思想是基於對原圖進行等價變換。
等價變換①:偶環可以“縮成”一個點(偶環裡的邊將變成這個點的子環)。
等價變換②:自環可以拆成一個新的兒子。
直接將此題的樹看成圖,可以發現子樹 \(sg_y\) 對 \(sg_x\) 的貢獻是 \(sg_y \oplus [w_{x,y} \nmid 2]\) 。特殊情況是 \(sg_y+1[w_{x,y}=1]\)。
第二問相當於,我們要將某一條邊減少一,使根的 \(sg\)