社区讨论
at_abc427_d求助,T了一个点
学术版参与者 2已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @mhj1x643
- 此快照首次捕获于
- 2025/11/03 19:23 4 个月前
- 此快照最后确认于
- 2025/11/03 19:23 4 个月前
CPP
#include <bits/stdc++.h>
#define _ read()
using namespace std;
const int N = 210000;
bool used[N][30], f[N][30];
vector<int> edges[N];
int test, n, m, k;
char s[N];
inline int read() {
int num = 0, w = 1;
char ch = getchar();
while (ch < '0' || ch > '9') {
if (ch == '-')
w = -1;
ch = getchar();
}
while (ch >= '0' && ch <= '9') {
num = (num << 1) + (num << 3) + (ch ^ 48);
ch = getchar();
}
return num * w;
}
inline void dfs(int p, int t) {
if (t == 0)
return s[p] == 'A' ? f[p][t] = 1 : f[p][t] = 0, void();
if (used[p][t])
return;
for (auto y : edges[p]) {
if (!used[y][t - 1])
dfs(y, t - 1);
if (!f[y][t - 1])
return f[p][t] = 1, used[p][t] = true, void();
}
used[p][t] = true;
f[p][t] = 0;
}
inline void solve() {
memset(f, 0, sizeof(f));
memset(used, 0, sizeof(used));
n = _;
m = _;
k = _;
scanf("%s", s + 1);
for (int i = 1; i <= n; i++) if (edges[i].size())
edges[i].clear();
for (; m--; ) {
int u, v;
u = _, v = _;
edges[u].push_back(v);
// edges[v].push_back(u);
}
dfs(1, 2 * k);
printf("%s\n", f[1][2 * k] ? "Alice" : "Bob");
}
int main() {
scanf("%d", &test);
for (; test--; )
solve();
return 0;
}
回复
共 3 条回复,欢迎继续交流。
正在加载回复...