(題目鏈結)
給出乙個森林,兩個人輪流操作,每次把乙個節點以及它的祖先全部抹去,無節點可以抹去是算輸,問是否存在先手必勝策略。
trie樹合併,其實就是線段樹合併。
bzoj4134的簡單版:
二進位制小心寫錯
// bzoj4730#include#include#include#include#include#include#include#define ll long long
#define inf (1ll<<60)
#define pi acos(-1.0)
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
using namespace std;
const int maxn=1000010;
int head[maxn],vis[maxn],sg[maxn],rt[maxn],n,m,sz,cnt,bin[30];
struct edge e[maxn<<1];
struct node
}tr[maxn<<2];
void link(int u,int v) ;head[u]=cnt;
e[++cnt]=(edge);head[v]=cnt;
}void pushdown(int k,int x)
void insert(int &k,int x,int y)
int merge(int x,int y,int k)
void dfs(int x,int fa)
insert(rt[x],t,20); //此時插入的是刪除x所得到的後繼狀態的sg值
for (int i=head[x];i;i=e[i].next) if (e[i].to!=fa)
for (int i=20,p=rt[x];i;i--)
}int main()
int ans=0;
for (int i=1;i<=n;i++)
if (!vis[i]) dfs(i,0),ans^=sg[i];
puts(ans ? "alice" : "bob");
} return 0;
}
BZOJ4730 Alice和Bob又在玩遊戲
傳送門 首先可以看出這是一道博弈論的題,我們考慮對於每一棵樹求出sg。存在這樣兩種情況 1.去掉根,那麼這棵樹的sg是其所有點的sg異或和。2.去掉子樹中的乙個點,那麼這棵樹的sg是其所有點的sg異或和再異或上這個點到根這條路徑上的所有點sg。對於第一種情況很好處理,而第二種情況暴力做法則是列舉每個...
4730 Alice和Bob又在玩遊戲
time limit 40 sec memory limit 1024 mb submit 116 solved 52 submit status discuss alice和bob在玩遊戲。有n個節點,m條邊 0 m n 1 構成若干棵有根樹,每棵樹的根節點是該連通塊內編號最 小的點。alice和...
Alice和Bob賭糖果 概率 經典
alice和bob賭糖果。規則是這樣的 alice從 l,r 中隨機抽乙個數,bob從 l,r 中隨機抽乙個數,誰抽的數大誰就贏,輸的一方給另一方1顆糖 平局不用給糖 他們會一直賭下去直到有一方沒有糖果為止。alice有n顆糖果,bob有m顆糖果,求alice將bob的糖果贏完的概率。第一行3個整數...