HDU 6741 樹上刪葉子節點博弈

2022-07-16 03:51:13 字數 1045 閱讀 3772

假設現在有一顆樹a

我們在他非葉子節點上加乙個點變成樹b 則此時樹b必為先手必勝

假設a為先手必勝 則先手直接把加入的點一同刪去

假設a為先手必敗 則先手可以只刪加入的點 與後手位置互換 把必敗態留給後手

所以只要有乙個非葉子節點連著乙個葉子節點(葉子節點父親的度數》2) 此時的樹為先手必勝

排除掉這種必勝情況 剩下的就是每個葉子節點的父親度數都為2的情況

則我們可以計算每個葉子到他第乙個度數》2的祖先的長度 如果所有這些長度都為偶數的話 那麼是後手必勝

策略是這樣的: 我們定義葉子節點到他第乙個度數》2的祖先路上的經過的節點和邊為'鏈'

假設先手這次拿了集合為s的鏈上的葉子節點 那麼後手也拿集合為s的鏈上的葉子節點 這樣每條鏈的長度還是偶數 直到有一條鏈他只剩乙個節點直接轉換為上面的必勝情況

如果有一條鏈是奇數的話 就是先手必勝 因為先手直接把所有鏈拿成偶數就可以和後手位置互換 把必敗態留給後手

#includeusing

namespace

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表示輸入結...