when I hit this question, I suddenly found that I could not even simulate an array of critical tables. It was a sin and a sin...
# Include <cstdio> # include <cstring> int n, m; const int maxn = 200050; int head [maxn], CNT; struct edge {int V, task, next ;} edge [maxn]; int node [maxn]; void addedge (int v, int U) {edge [CNT]. V = V; edge [CNT]. next = head [u]; head [u] = CNT ++;} void DFS (int u, int task) {int P = head [u]; node [u] = task; (;~ P; P = edge [p]. next) {int v = edge [p]. v; DFS (v, task);} return;} void Init () {memset (Head,-1, sizeof (head); CNT = 0;} void debug () {for (INT I = 0; I <n; ++ I) {printf ("% d", node [I]) ;}printf ("\ n ");} int main () {int CAS; char TMP [5]; int U, V, task; scanf ("% d", & CAS); For (INT I = 1; I <= CAS; ++ I) {scanf ("% d", & N); Init (); memset (node,-1, sizeof (node )); for (INT I = 0; I <n-1; ++ I) {scanf ("% d", & U, & V); addedge (u, v );} scanf ("% d", & M); printf ("case # % d: \ n", I); For (INT I = 0; I <m; ++ I) {scanf ("% s", TMP); If (TMP [0] = 'C') {scanf ("% d", & U ); printf ("% d \ n", node [u]); // debug ();} If (TMP [0] = 'T ') {scanf ("% d", & U, & task); DFS (u, task) ;}} return 0 ;}