#include <iostream> #include <vector> #include <cstring> using namespace std; const int MAXN = 100005; vector<int> adj[MAXN]; char result[MAXN]; char input[MAXN]; void dfs(int u, int p, char c) { result[u] = c; for (int v : adj[u]) { if (v != p) { if (c == 'd') dfs(v, u, 'p'); else dfs(v, u, 'd'); } } } int main() { int n; cin >> n; for (int i = 1; i <= n; ++i) { cin >> input[i]; } for (int i = 1; i < n; ++i) { int u, v; cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); } dfs(1, 0, 'd'); for (int u = 1; u <= n; ++u) { for (int v : adj[u]) { if (result[u] == result[v] && input[u] != '?' && input[v] != '?') { cout << -1 << endl; return 0; } } } for (int i = 1; i <= n; ++i) { cout << result[i]; } cout << endl; return 0; }
这也能过?
全部评论
(1) 回帖