竞赛讨论区 > E题 这个样例1没过,也能过
头像
Christins
编辑于 02-26 21:14
+ 关注

E题 这个样例1没过,也能过

void solve {
	int n;
    std::cin >> n;

    std::string s;
    std::cin >> s;
    s = '&' + s;

    std::vector<std::vector<int>> adj(n + 1);
    for (int i = 1; i < n; i++) {
        int u, v;
        std::cin >> u >> v;
        adj[u].push_back(v);
        adj[v].push_back(u);
    }

    bool ok = true;
    auto dfs = [&](auto dfs, int u, int fa) {
        if (s[u] == '?') s[u] = s[fa] == 'd' ? 'p' : 'd';
        else if (s[u] == s[fa]) {
            ok = false;
            return ;
        }
        for (auto x : adj[u]) {
            if (x == fa) continue ;
            dfs(dfs, x, u);
        }
    };
    dfs(dfs, 1, 0);

    if (ok) {
        for (int i = 1; i <= n; i++) {
            std::cout << s[i];
        }
        std::cout << "\n";
    } else {
        std::cout << "-1\n";
    }
}

全部评论

(0) 回帖
加载中...
话题 回帖

等你来战

查看全部

热门推荐