日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【清华集训2016】Alice和Bob又在玩游戏

發布時間:2025/7/14 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【清华集训2016】Alice和Bob又在玩游戏 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

不難的題目。因為SG性質,所以只需要對一棵樹求出。

然后如果發現從上往下DP不太行,所以從下往上DP。

考慮一個點對子樹的合并,考慮下一個刪的點在哪一個子樹,那么剩下的狀態實際上就是把一個子樹所有能達到的狀態異或上一個數。

此時還有不到子樹的狀態,直接插入子樹SG異或值。

所以顯然,就是維護一個支持全部異或,以及狀態合并,查詢mex的數據結構,直接trie合并帶tag就好了。

時空復雜度 \(O(n \log n)\)

#include <bits/stdc++.h>const int MAXN = 100010; const int UP = 21; const int MN = MAXN * (UP + 1); int son[MN][2], val[MN], tag[MN], txt; void mktag(int u, int v) { tag[u] ^= v; } void pushdown(int u, int dig) {if (tag[u]) {if (son[u][0]) mktag(son[u][0], tag[u]);if (son[u][1]) mktag(son[u][1], tag[u]);if (tag[u] >> dig & 1)std::swap(son[u][0], son[u][1]);tag[u] = 0;} } void update(int u) { val[u] = val[son[u][0]] + val[son[u][1]]; } void insert(int & x, int v, int dig = UP) {if (!x) x = ++txt, son[x][0] = son[x][1] = val[x] = tag[x] = 0;if (dig == -1) return (void) (val[x] = 1);pushdown(x, dig);insert(son[x][v >> dig & 1], v, dig - 1);update(x); } int merge(int x, int y, int dig = UP) {if (!x || !y) return x | y;pushdown(x, dig), pushdown(y, dig);son[x][0] = merge(son[x][0], son[y][0], dig - 1);son[x][1] = merge(son[x][1], son[y][1], dig - 1);if (dig != -1) update(x);return x; } int query(int u, int dig = UP) {if (!u) return 0;if (val[son[u][0]] < (1 << dig)) return query(son[u][0], dig - 1);return query(son[u][1], dig - 1) | 1 << dig; } int head[MAXN], nxt[MAXN << 1], to[MAXN << 1], tot; void addedge(int b, int e) {nxt[++tot] = head[b]; to[head[b] = tot] = e;nxt[++tot] = head[e]; to[head[e] = tot] = b; } int sg[MAXN], rts[MAXN]; bool vis[MAXN]; int solve(int u, int fa = 0) {vis[u] = true;int pre = 0, & rt = rts[u];for (int i = head[u]; i; i = nxt[i]) if (to[i] != fa)solve(to[i], u), pre ^= sg[to[i]];for (int i = head[u]; i; i = nxt[i]) if (to[i] != fa) {mktag(rts[to[i]], pre ^ sg[to[i]]);rt = merge(rt, rts[to[i]]);}insert(rt, pre);sg[u] = query(rt);return rt; } int n, m; int main() {std::ios_base::sync_with_stdio(false), std::cin.tie(0);int T; std::cin >> T;while (T --> 0) {std::cin >> n >> m;for (int i = 1; i <= m; ++i) {int t1, t2; std::cin >> t1 >> t2;addedge(t1, t2);}int ans = 0;for (int i = 1; i <= n; ++i) if (!vis[i])solve(i), ans ^= sg[i];std::cout << (ans ? "Alice" : "Bob") << '\n';tot = 0; memset(head, 0, n + 1 << 2);memset(vis, 0, n + 1); txt = 0;memset(rts, 0, n + 1 << 2);}return 0; }

轉載于:https://www.cnblogs.com/daklqw/p/11563341.html

總結

以上是生活随笔為你收集整理的【清华集训2016】Alice和Bob又在玩游戏的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 播放毛片 | 精产国品一区二区 | 欧美在线免费观看视频 | 国产大片在线观看 | 亚洲一区二区图片 | 99久久香蕉 | 欧美黄色三级视频 | 欧美亚洲黄色片 | 一级爱爱片| 日本免费在线视频观看 | 香蕉视频官方网站 | 色欲一区二区三区精品a片 在线观看黄网站 | 日本大胆裸体做爰视频 | 亚洲v欧美 | 黄色三级三级 | 亚洲色图综合 | 在线超碰91 | 久久人人爽爽人人爽人人片av | 无码gogo大胆啪啪艺术 | 日韩熟女一区二区 | 国产成人精品视频在线观看 | 国产精品乱码一区 | www.日日| 重囗味sm一区二区三区 | 午夜精品久久久久久久91蜜桃 | 亚洲免费在线观看av | 日本黄色激情视频 | 国产av天堂无码一区二区三区 | 91香蕉视频在线看 | 东北熟女一区二区三区 | 国产精品男人的天堂 | 中文字幕88 | 久久久久久国产精品 | 巨茎大战刘亦菲 | 精品一区二区久久久久蜜桃 | 四虎免看黄 | 成人黄色网址在线观看 | 国产精品zjzjzj在线观看 | 老头老太做爰xxx视频 | 伊人影视久久 | 综合性色 | 黄色片成人| 亚洲91在线 | 91麻豆精品一区二区三区 | 五月天在线播放 | 久久久久亚洲av片无码下载蜜桃 | 国产精品久久一区二区三区动 | 成人久久视频 | 亚洲天堂2020 | 国产高清黄色 | 日韩手机在线观看 | 男人操女人视频网站 | 日本色悠悠 | 日本肉体xxxⅹ裸体交 | 日本黄色免费网址 | 91成人在线观看喷潮蘑菇 | 殴美一级片| 亚洲精品国产欧美 | 夜夜天天拍拍 | 农民人伦一区二区三区 | 琪琪av在线 | 99热这里精品 | 丝袜国产在线 | 久操免费视频 | 日韩孕交| 日本免费一区视频 | 久久曹| 欧美激精品 | 这里只有久久精品 | 变态另类一区 | 日本一区二区免费在线观看 | 国产偷人| 最新av网址在线观看 | 草草影院国产 | 丝袜制服中文字幕 | 九九综合视频 | www.自拍| 最近最新最好看的2019 | 久操亚洲 | 天堂在线资源库 | 国产精品久久久久久一区二区三区 | 天堂a视频| www四虎 | 在线免费视频一区 | 亚洲AV无码久久精品国产一区 | 欧美日韩不卡 | 纯爱无遮挡h肉动漫在线播放 | 黄色美女毛片 | 一区二区毛片 | av免费片| 99热影院 | 国产精品区在线 | 95视频在线 | 欧美色亚洲色 | 欧美国产日韩在线观看 | 嫩草影院一区 | 男人天堂社区 | 久久这里只有精品99 | 91精品国产一区二区三区蜜臀 |