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";
    }
}

全部评论

相关推荐

昨天 18:09
门头沟学院 Java
点赞 评论 收藏
分享
07-14 12:22
门头沟学院 Java
点赞 评论 收藏
分享
每晚夜里独自颤抖:你cet6就cet6,cet4就cet4,你写个cet证书等是什么意思。专业技能快赶上项目行数,你做的这2个项目哪里能提现你有这么多技能呢
点赞 评论 收藏
分享
半解316:内容充实,细节需要修改一下。 1,整体压缩为一页。所有内容顶格。 2,项目描述删除,直接写个人工作量 修改完之后还需要建议,可以私聊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务