首页 > 代码库 > zoj 3666 Alice and Bob , SG函数
zoj 3666 Alice and Bob , SG函数
题意:
在一个有向无环图上,有若干玩具,每人每次只能将一个玩具移动一步,玩具被移动到终点n将不能再被移动了,最后不能移动者输。
组合博弈
SG函数应用
#include<vector> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn = 10000 + 100; int SG[maxn]; vector<int> g[maxn]; int mex(int u) { //minimal excludant if(SG[u]!=-1) return SG[u]; int i; bool vis[maxn]; memset(vis, 0, sizeof vis ); for(i=0; i<g[u].size(); ++i) { vis[mex(g[u][i])] = true; } for(i=0; vis[i]; ++i); return SG[u] = i; } int main() { int n, c, x, q, m; int cas= 1; while(~scanf("%d", &n)) { for(int i=0; i<=n; ++i) g[i].clear(); for(int i=1; i<n; ++i) { scanf("%d", &c); while(c--) { scanf("%d", &x); g[i].push_back(x); } } memset(SG, -1, sizeof SG ); printf("Case %d:\n", cas++); scanf("%d", &q); while(q--) { scanf("%d", &m); int ans = 0; while(m--) { scanf("%d", &x); ans ^= mex(x); } if(ans) puts("Alice"); else puts("Bob"); } } return 0; }
zoj 3666 Alice and Bob , SG函数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。