orz sjk
有一棵樹,兩個人每個節點上有乙個權值,兩個人輪流選擇乙個根節點將其權值\(k\)除以\([2,k+1]\)若除到\(0\)就刪去此根節點,它的兒子變成新根節點,刪掉最後乙個點贏。求先手還是後手必勝。
首先考慮一些只有乙個根節點的樹,如果以二進位制角度看,每次除以\([2,k+1]\)的數相當於拿掉一些二進位制位的1,至少拿掉頂上的,可以拿完,這就相當於nim取石頭遊戲。每個權值相當於有\(log_2k+1\)個石頭。
那麼設\(sg(u,i)\)表示節點\(u\)有\(i\)個石頭的\(sg\)值,顯然葉子節點\(u\)的\(sg(u,i)=i\),非葉子節點\(u\)的\(sg(u,0)=sg(son_1(u),k_1(u))\ xor\ sg(son_2(u),k_2(u))\ xor...\) 根據\(sg(u,k)=mex\\) 那麼 \(sg(u,k)=mex \\) 本來\(sg(u,0)=0\)那麼\(sg(u,k)=k\)現在\(sg(u,0)\)等於乙個不為零的數\(x\)那麼\(sg(u,1)=0\ sg(u,2)=1\ ... sg(u,x)=x-1\)直到\(sg(u,x+1)=x+1\).
#includeusing namespace std;
typedef unsigned long long ll;
const int n=100010;
struct ee[n<<1];
int h[n],cnt;
void adge(int f,int t);h[f]=cnt;}
ll mi[100] ,val[n];
int sg[n];
void dfs(int u,int fa)
if(!yz) sg[u]=x-(x<=sg[u]);
else sg[u]=x;}
int main()
dfs(0,0);
puts(sg[0]?"alice":"marisa");
for(int i=0;icnt=-1;
}return 0;
}
(2016北京集訓十四) xsy1557 task
限制可以看成圖狀結構,每個任務的對物品數量的影響可以看成權值,只不過這個權值用乙個五元組來表示。那麼題意要求的就是最大權閉合子圖,網路流經典應用。1 include2 include3 include4 include5 include6 include7 define inf 1000000000...
(2016北京集訓十二) xsy1542 瘋狂求導
這題看起來很難。但是實際上並沒有想象中的那麼難 第一眼看上去不會求導公式怎麼辦?不要緊,題目背景非常良心的給出了題目中的導數計算公式 求完導合併同類項很噁心怎麼辦?不要緊,樣例解釋說明了不需要合併同類項 然後有許多人因為這個爆 了 一看這種題目形式明顯就是大資料結構,外面的序列明顯線段樹維護,次數也...
2016北京集訓 陣列
portal broken qwq 給你乙個陣列,每個元素有乙個顏色,要求支援兩種操作 1 修改某個元素的顏色 2 詢問這個陣列有多少個自取件內沒有重複的顏色 資料範圍 n 10 5,m 2n 顏色大小在 1 sim n 之間 這題。本來應該是乙個樹套樹題 但是為什麼一定要用樹套樹呢對吧qwq 首先...