mayoko’s diary

プロコンとかいろいろ。

CODE THANKS FESTIVAL 2015 F - お祭りとお菓子

解法

ここでは「勝つ」というのは「実 1 を食べる」ということを指します。また, 「実(み)」と「頂点」はしばしば同じ意味です。

まず, 頂点 1 の次数が 1 なら A さんは速攻で食べれば良いので A が勝ちます。

それ以外の場合は, 実は頂点数のみに依存して勝敗が決まります。これはなぜかというと, どちらも実 1 を取られないようにするために, 頂点 1 に隣接した頂点はなるべく取り除かないようにするはずです。

よって, 最終的に残るのは, 頂点 1 とそれに隣接する頂点のみになり, 次にどちらが実 1 を取るかは 偶奇にのみ依存します。

const int MAXN = 100010;
vector<int> G[MAXN];

int main() {
    cin.tie(0);
    ios::sync_with_stdio(false);
    int N;
    cin >> N;
    for (int i = 0; i < N-1; i++) {
        int s, t;
        cin >> s >> t;
        s--; t--;
        G[s].push_back(t);
        G[t].push_back(s);
    }
    if (G[0].size() == 1) {
        cout << "A" << endl;
    } else {
        if (N%2) cout << "B" << endl;
        else cout << "A" << endl;
    }
    return 0;
}