首页 > 代码库 > HDU 3094 A tree game 树的删边游戏
HDU 3094 A tree game 树的删边游戏
叶子节点的SG值为0 非叶子节点的SG值为为它的所有子节点的SG值加1 后的异或和
#include <cstdio> #include <cstring> #include <vector> using namespace std; vector <int> G[100010]; int sg[100010]; int dfs(int x, int f) { if(sg[x] != -1) return sg[x]; if(!G[x].size()) return 0; int ans = 0; for(int i = 0; i < G[x].size(); i++) { int v = G[x][i]; if(v == f) continue; ans ^= dfs(v, x)+1; } return ans; } int main() { int T; scanf("%d", &T); while(T--) { memset(sg, -1, sizeof(sg)); int n; scanf("%d", &n); for(int i = 1; i <= n; i++) G[i].clear(); for(int i = 1; i < n; i++) { int u, v; scanf("%d %d", &u, &v); G[u].push_back(v); G[v].push_back(u); } int ans = dfs(1, -1); if(ans) puts("Alice"); else puts("Bob"); } return 0; }
HDU 3094 A tree game 树的删边游戏
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。