假設現在有一顆樹a
我們在他非葉子節點上加乙個點變成樹b 則此時樹b必為先手必勝
假設a為先手必勝 則先手直接把加入的點一同刪去
假設a為先手必敗 則先手可以只刪加入的點 與後手位置互換 把必敗態留給後手
所以只要有乙個非葉子節點連著乙個葉子節點(葉子節點父親的度數》2) 此時的樹為先手必勝
排除掉這種必勝情況 剩下的就是每個葉子節點的父親度數都為2的情況
則我們可以計算每個葉子到他第乙個度數》2的祖先的長度 如果所有這些長度都為偶數的話 那麼是後手必勝
策略是這樣的: 我們定義葉子節點到他第乙個度數》2的祖先路上的經過的節點和邊為'鏈'
假設先手這次拿了集合為s的鏈上的葉子節點 那麼後手也拿集合為s的鏈上的葉子節點 這樣每條鏈的長度還是偶數 直到有一條鏈他只剩乙個節點直接轉換為上面的必勝情況
如果有一條鏈是奇數的話 就是先手必勝 因為先手直接把所有鏈拿成偶數就可以和後手位置互換 把必敗態留給後手
#includeusingnamespace
std;
int fa[1000005
];vector
g[1000005
], yezi;
int du[1000005], size[1000005
];int
main()
for (int i = 2; i <= n; i++)
for (int i = 1; i <= n; i++)
}bool flag = 0
;
for (int
v : yezi)
int cnt = 1
;
while (size[fa[v]] == 1
)
if (cnt & 1
) }
if(flag)
else
}return0;
}
hdu4035 樹上概率dp
從葉子到根,帶入公式求引數 kuangbin hdu 4035 dp求期望的題。題意 有n個房間,由n 1條隧道連通起來,實際上就形成了一棵樹,從結點1出發,開始走,在每個結點i都有3種可能 1.被殺死,回到結點1處 概率為ki 2.找到出口,走出迷宮 概率為ei 3.和該點相連有m條邊,隨機走一條...
HDU 5963 朋友 樹上博弈
給定一棵樹,樹中每一條邊有乙個權值為0或者1,每次遊戲需要找到乙個點,滿足該點到其父親的邊權為1,然後找到這個點到根節點的簡單路徑,將路徑上所有邊的權值翻轉。當一方無法操作時,另一方就獲勝。每次遊戲有m個操作,0 x表示指定x為根節點,要求輸出誰會贏 1 x y z表示將x和y之間的邊修改為z。本題...
樹上戰爭 HDU 2545
題目 給一棵樹,如果樹上的某個節點被某個人佔據,則它的所有兒子都被佔據,lxh和pfz初始時分別站在兩個節點上,誰當前所在的點被另乙個人佔據,他就輸了比賽,問誰能獲勝 input 輸入包含多組資料 每組第一行包含兩個數n,m n,m 100000 n表示樹的節點數,m表示詢問數,n m 0表示輸入結...