設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分。第二題想了下應該是樹鏈剖分,然後發現搞不出來,回去水第一題,然後水完回來繼續...