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) 回帖