2017湖南集訓7 9 營養餐 階梯博弈

2021-08-03 14:39:19 字數 845 閱讀 9776

設num[i]表示點i還能取走多少個水果,num[i]=a[i]-sigma(a[son]*b[son]),

可以發現點i拿走k個後,num[i]-=k,num[fa[i]]+=k*b[i],於是就能想到階梯博弈了,先把b[i]=0的點與fa[i]的邊斷掉,因為取了i點的水果對fa[i]是沒有影響的,剩下的森林裡,sg函式值即為對奇數層的nim,即numi的異或和。因為對手把偶數層的移到奇數層,只要把那些石子繼續移到下乙個奇數層即可。

**:

#include

#include

#include

#include

#include

#define ll long long

using namespace std;

const int maxn=50010;

int a[maxn],b[maxn],n=0;

ll ans=0;

intread()

while(ch>='0'&&ch<='9')

return

x*f;

}struct edge

*con[maxn];

void ins(int

x,int

y)void dfs(int v,int fa,int d)

dw=a[v]-dw;

if(d&1) ans^=dw;

}int main()

ans=0;

dfs(1,0,1);

if(ans==0) puts("no");

else puts("yes");

}return

0;}

2017湖南集訓7 9 大佬的問題 (數點問題)

題目大意 給出三個排列a,b,c,問同時滿足ax ay,bx by,cx cy的數對有多少。o n log 2 n 的做法 經典的三維數點問題,排序一維,cdq分治一維,樹狀陣列一維。o n log n 的做法 因為均為排列,所以沒有相同的元素,設s x,y ax ay bx by cx cy 顯然...

Biology 湖南集訓

題目大意 n個字串,m個操作,可以插入字串,也可以詢問某t個字串的最長字尾 題解 trie lca trie樹的插入與查詢操作。把字串反轉就相當於求公共字首。lca的深度就是公共字首的長度。biology include include include define maxn 1000009 usi...

湖南集訓Day4

上午的數論感覺還可以,嗯,感覺。因為畢竟我數學弱,只聽懂一半什麼的,感覺證明還是比較顯然的。話說這金牌爺長得好像我某物理老師啊 下午的題終於不是clj出的了,沒辣麼虐了。第一題疑似回文自動機,然而並不會,於是dp水了60分。第二題想了下應該是樹鏈剖分,然後發現搞不出來,回去水第一題,然後水完回來繼續...