社区讨论

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 条回复,欢迎继续交流。

正在加载回复...