E题真的是树形DP #include<bits/stdc++.h> using namespace std; const int N=1e5+10; int n; vector<int> e[N]; char s[N]; bool dfs(int u,int fa) { char ch=s[u],c; if(ch=='d')c='p'; else c='d'; for(auto v:e[u]) { if(v==fa)continue; if(s[v]=='?')s[v]=c; else if(s[v]==ch)return false; if(!(dfs(v,u)))r...