[AGC017D]Game on Tree

Posted skylee03

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[AGC017D]Game on Tree相关的知识,希望对你有一定的参考价值。

[AGC017D]Game on Tree

题目大意:

一棵(n(nle10^5))个结点的树。A和B轮流进行游戏,A先手。每次删掉一棵子树,根结点不能删。最先不能操作的人输,问最后谁赢。

思路:

根据树上删边游戏的经典结论,根结点的sg值等于各子结点的sg值+1后的异或和。

源代码:

#include<cstdio>
#include<cctype>
#include<vector>
inline int getint() {
    register char ch;
    while(!isdigit(ch=getchar()));
    register int x=ch^'0';
    while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
    return x;
}
const int N=1e5+1;
std::vector<int> e[N];
inline void add_edge(const int &u,const int &v) {
    e[u].push_back(v);
    e[v].push_back(u);
}
int dfs(const int &x,const int &par) {
    int sg=0;
    for(auto &y:e[x]) {
        if(y==par) continue;
        sg^=dfs(y,x)+1;
    }
    return sg;
}
int main() {
    const int n=getint();
    for(register int i=1;i<n;i++) {
        add_edge(getint(),getint());
    }
    puts(dfs(1,0)?"Alice":"Bob");
    return 0;
}

以上是关于[AGC017D]Game on Tree的主要内容,如果未能解决你的问题,请参考以下文章

Atcoder #017 agc017 D.Game on Tree 树上NIM 博弈

agc023F - 01 on Tree

codeforces 220 C. Game on Tree

Codeforces 280C Game on Tree 期望

CF280C Game on Tree

Codeforces.280C.Game on Tree(期望)