QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#300779#4896. Alice、Bob 与 DFSzyc0704195 22ms18096kbC++146.0kb2024-01-08 19:52:302024-01-08 19:52:31

Judging History

你现在查看的是最新测评结果

  • [2024-01-08 19:52:31]
  • 评测
  • 测评结果:5
  • 用时:22ms
  • 内存:18096kb
  • [2024-01-08 19:52:30]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 3;

inline int read() {
    char ch = getchar(); int x = 0;
    while (!isdigit(ch)) {ch = getchar();}
    while (isdigit(ch)) {x = x * 10 + ch - 48; ch = getchar();}
    return x;
}

int n, c[N];
vector<int> g[N], vec;

namespace subtask1 {
    bool dp[N], ans;
    
    bool check() {
        for (int i = 1; i <= n; ++i)
            if (c[i] == 1) return false;
        return true;
    }

    void solve() {
        for (int x = n; x >= 1; --x) {
            dp[x] = 1;
            for (auto y : g[x]) dp[x] ^= dp[y];
        }
        for (auto r : vec) ans ^= dp[r];
        puts(ans ? "Alice" : "Bob");
    }
}

namespace subtask2 {
    int dp[N];

    bool check() {return vec.size() == 1;}

    void solve() {
        for (int x = n; x >= 1; --x) {
            if (g[x].empty()) dp[x] = 1;
            else {
                int val = 1;
                for (auto y : g[x]) {
                    if (val == 0) {
                        if (dp[y] == 0) val = 0;
                        else if (dp[y] == 1) val = 1;
                        else {
                            val = dp[y];
                            break;
                        }
                    }else {
                        if (dp[y] == 0) val = 1;
                        else if (dp[y] == 1) val = 0;
                        else {
                            val = dp[y] ^ 1;
                            break;
                        }
                    }
                }
                if (c[x] == 0) dp[x] = val;
                else {
                    if (val == 3) dp[x] = 1;
                    else if (val == 0) dp[x] = 2;
                    else dp[x] = val;
                }
            }
        }
        puts((dp[vec[0]] == 1 || dp[vec[0]] == 2) ? "Alice" : "Bob");
    }
}

namespace subtask3 {
    int cnt, val[N], sg[2000];
    vector< pair<int, int> > now;
    vector<int> to[2000], tmp;
    vector< vector< pair<int, int> > > tot;
    
    bool check() {
        int m = 0;
        for (int x = 1; x <= n; ++x) m += g[x].size();
        return (n <= 10 && m <= 10);
    }

    void dfs(int x, int lst) {
        now.push_back(make_pair(x, lst));
        tot.push_back(now);
        for (int i = 0; i < g[x].size(); ++i) dfs(g[x][i], i);
        now.pop_back();
    }

    void solve() {
        for (int x = 1; x <= n; ++x) {
            tot.clear(); dfs(x, 0); tot.push_back(now);
            for (int i = 0; i < tot.size(); ++i) to[i].clear();
            for (int i = 0; i < tot.size(); ++i) {
                if (tot[i].empty()) continue;
                for (int j = i + 1; j < tot.size(); ++j) {
                    if (tot[j].size() <= tot[i].size()) {
                        if (tot[j].empty()) {
                            to[i].push_back(j);
                            continue;
                        }
                        bool pd = true;
                        for (int ID = 0; ID + 1 < tot[j].size(); ++ID)
                            if (tot[j][ID] != tot[i][ID]) pd = false;
                        if (!pd) continue;
                        to[i].push_back(j);
                        if (c[tot[j][tot[j].size() - 2].first] == 0) break;
                    }
                    if (tot[j].size() == tot[i].size() + 1 && tot[j][tot[i].size() - 1] == tot[i].back()) {
                        to[i].push_back(j);
                        if (c[tot[i].back().first] == 0) break;
                    }
                }
            }
            for (int i = tot.size() - 1; i >= 0; --i) {
                tmp.clear();
                for (auto j : to[i]) tmp.push_back(sg[j]);
                sort(tmp.begin(), tmp.end());
                tmp.erase(unique(tmp.begin(), tmp.end()), tmp.end());
                int ans = 0;
                while (ans < tmp.size() && ans == tmp[ans]) ans++;
                sg[i] = ans;
            }
            val[x] = sg[0];
        }
        int fin = 0;
        for (auto x : vec) fin ^= val[x];
        puts(fin ? "Alice" : "Bob");
    }
}

namespace subtask4 {
    int du[N], ans, sg[N];
    multiset<int> S, T;
    
    bool check() {
        for (int x = 1; x <= n; ++x)
            for (auto y : g[x]) du[y]++;
        for (int i = 1; i <= n; ++i)
            if (du[i] > 1) return false;
        for (auto x : vec) if (du[x]) return false;
        return true;
    }

    void ins(int x) {
        if (T.find(x) != T.end()) T.erase(T.find(x));
        else S.insert(x);
        while (S.find(ans) != S.end()) ans++;
    }

    void del(int x) {
        if (S.find(x) != S.end()) S.erase(S.find(x));
        else T.insert(x);
    }

    int work() {
        int res;
        if (T.empty()) res = ans;
        else res = min(ans, *T.begin());
        ins(res); return res;
    }

    void dfs(int x) {
        if (g[x].empty()) {
            sg[x] = work();
            return;
        }
        for (auto y : g[x]) dfs(y);
        sg[x] = work();
        for (auto y : g[x]) del(sg[y]);
    }
    
    void solve() {
        ins(0);
        for (int i = 1; i <= n; ++i) reverse(g[i].begin(), g[i].end());
        for (int i = 1; i <= n; ++i)
            if (du[i] == 0) S.clear(), T.clear(), ans = 0, dfs(i);
        int fin = 0;
        for (auto x : vec) fin ^= sg[x];
        puts(fin ? "Alice" : "Bob");
    }
}

int main() {
    n = read();
    for (int i = 1; i <= n; ++i) c[i] = read();
    for (int x = 1, m, y; x <= n; ++x) {
        m = read();
        while (m--) {
            y = read();
            g[x].push_back(y);
        }
    }
    int k = read(), x;
    while (k--) x = read(), vec.push_back(x);

    // subtask4 :: solve(); exit(0);

    if (subtask1 :: check()) subtask1 :: solve();
    else if (subtask4 :: check()) subtask4 :: solve();
    else if (subtask2 :: check()) subtask2 :: solve();
    else if (subtask3 :: check()) subtask3 :: solve();
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 5
Accepted

Test #1:

score: 5
Accepted
time: 2ms
memory: 10516kb

input:

1000
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0...

output:

Alice

result:

ok "Alice"

Test #2:

score: 0
Accepted
time: 2ms
memory: 11828kb

input:

1000
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0...

output:

Bob

result:

ok "Bob"

Test #3:

score: 0
Accepted
time: 2ms
memory: 9784kb

input:

1000
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0...

output:

Alice

result:

ok "Alice"

Test #4:

score: 0
Accepted
time: 1ms
memory: 10344kb

input:

10
0 0 0 0 0 0 0 0 0 0
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
1 10
0
1
1

output:

Bob

result:

ok "Bob"

Test #5:

score: 0
Accepted
time: 1ms
memory: 12008kb

input:

11
0 0 0 0 0 0 0 0 0 0 0
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
1 10
0
0
2
1 11

output:

Alice

result:

ok "Alice"

Test #6:

score: 0
Accepted
time: 13ms
memory: 18096kb

input:

200000
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0...

output:

Bob

result:

ok "Bob"

Test #7:

score: 0
Accepted
time: 14ms
memory: 17244kb

input:

200000
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0...

output:

Bob

result:

ok "Bob"

Test #8:

score: 0
Accepted
time: 15ms
memory: 17364kb

input:

200000
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0...

output:

Alice

result:

ok "Alice"

Test #9:

score: 0
Accepted
time: 17ms
memory: 16972kb

input:

200000
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0...

output:

Bob

result:

ok "Bob"

Test #10:

score: 0
Accepted
time: 22ms
memory: 17408kb

input:

200000
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0...

output:

Bob

result:

ok "Bob"

Test #11:

score: 0
Accepted
time: 19ms
memory: 16128kb

input:

200000
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0...

output:

Bob

result:

ok "Bob"

Test #12:

score: 0
Accepted
time: 22ms
memory: 16208kb

input:

200000
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0...

output:

Bob

result:

ok "Bob"

Test #13:

score: 0
Accepted
time: 14ms
memory: 16140kb

input:

200000
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0...

output:

Alice

result:

ok "Alice"

Test #14:

score: 0
Accepted
time: 17ms
memory: 15060kb

input:

200000
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0...

output:

Bob

result:

ok "Bob"

Test #15:

score: 0
Accepted
time: 2ms
memory: 10956kb

input:

1
0
0
1
1

output:

Alice

result:

ok "Alice"

Test #16:

score: 0
Accepted
time: 2ms
memory: 11808kb

input:

3
0 0 0
1 2
1 3
0
1
1

output:

Alice

result:

ok "Alice"

Test #17:

score: 0
Accepted
time: 0ms
memory: 10728kb

input:

4
0 0 0 0
1 2
1 3
0
0
2
1 4

output:

Bob

result:

ok "Bob"

Subtask #2:

score: 0
Wrong Answer

Test #18:

score: 0
Wrong Answer
time: 1ms
memory: 10432kb

input:

7
0 0 1 1 0 1 1
1 2
2 3 4
0
2 5 6
0
1 7
0
1
1

output:

Alice

result:

wrong answer 1st words differ - expected: 'Bob', found: 'Alice'

Subtask #3:

score: 0
Wrong Answer

Test #55:

score: 0
Wrong Answer
time: 1ms
memory: 11768kb

input:

7
0 0 1 1 0 1 1
1 2
2 3 4
0
2 5 6
0
1 7
0
1
1

output:

Alice

result:

wrong answer 1st words differ - expected: 'Bob', found: 'Alice'

Subtask #4:

score: 0
Wrong Answer

Test #103:

score: 20
Accepted
time: 1ms
memory: 9888kb

input:

10
1 1 1 1 1 1 1 1 1 1
1 2
4 3 5 7 8
1 4
0
1 6
0
0
1 9
1 10
0
1
1

output:

Alice

result:

ok "Alice"

Test #104:

score: 0
Accepted
time: 1ms
memory: 10040kb

input:

10
1 1 1 1 1 1 1 1 1 1
4 2 3 4 10
0
0
1 5
1 6
2 7 8
0
1 9
0
0
1
1

output:

Alice

result:

ok "Alice"

Test #105:

score: 0
Accepted
time: 1ms
memory: 10768kb

input:

10
1 1 1 1 1 1 1 1 1 1
2 2 7
1 3
2 4 6
1 5
0
0
0
1 9
0
0
10
8 10 10 8 10 8 10 10 1 8

output:

Alice

result:

ok "Alice"

Test #106:

score: 0
Accepted
time: 1ms
memory: 9840kb

input:

10
1 1 1 1 1 1 1 1 1 1
2 2 3
0
0
1 5
0
2 7 9
1 8
0
0
0
10
6 6 4 1 1 4 10 10 10 6

output:

Alice

result:

ok "Alice"

Test #107:

score: 0
Accepted
time: 0ms
memory: 10368kb

input:

10
1 1 1 1 1 1 1 1 1 1
1 2
0
2 4 5
0
1 6
0
0
0
0
0
10
10 10 1 9 8 9 10 7 7 3

output:

Alice

result:

ok "Alice"

Test #108:

score: 0
Accepted
time: 0ms
memory: 9948kb

input:

10
1 1 1 1 1 1 1 1 1 1
1 2
1 3
1 4
1 5
2 6 7
0
2 8 9
0
1 10
0
10
1 1 1 1 1 1 1 1 1 1

output:

Bob

result:

ok "Bob"

Test #109:

score: 0
Accepted
time: 1ms
memory: 11736kb

input:

10
1 1 1 1 1 1 1 1 1 1
1 2
0
1 4
0
1 6
0
0
0
0
0
10
10 9 1 10 8 1 3 7 9 5

output:

Bob

result:

ok "Bob"

Test #110:

score: 0
Accepted
time: 0ms
memory: 10004kb

input:

10
1 1 1 1 1 1 1 1 1 1
2 2 3
0
2 4 6
1 5
0
1 7
0
0
0
0
10
10 9 1 8 1 10 10 9 1 1

output:

Bob

result:

ok "Bob"

Test #111:

score: 0
Accepted
time: 1ms
memory: 11736kb

input:

100
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 2
1 3
2 4 38
1 5
1 6
1 7
1 8
1 9
1 10
1 11
1 12
1 13
4 14 35 36 37
1 15
1 16
1 17
1 18
2 19 31...

output:

Alice

result:

ok "Alice"

Test #112:

score: -20
Wrong Answer
time: 1ms
memory: 11972kb

input:

100
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 2
0
2 4 29
1 5
3 6 7 8
0
0
1 9
1 10
5 11 20 21 27 28
5 12 13 16 18 19
0
2 14 15
0
0
1 17
0
0
0...

output:

Alice

result:

wrong answer 1st words differ - expected: 'Bob', found: 'Alice'

Subtask #5:

score: 0
Skipped

Dependency #4:

0%

Subtask #6:

score: 0
Skipped

Dependency #1:

100%
Accepted

Dependency #2:

0%