//5930448 2012-05-11 22:32:09 Accepted 3974 218MS 928K 1079 B G++ nkhelloworld //20120511 1A //变换任务时不更新,询问时一直更新到最大BOSS #include <cstdio> #include <iostream> using namespace std; #include <cstring> #define MAXN 51000 int father[MAXN]; int n,m; struct DOING { int level,work; }doing[MAXN]; int query(int person) { int res = -1,level = -1; while(person!=0) { if(doing[person].level > level) { res = doing[person].work; level = doing[person].level; } person = father[person]; } return res; } int main() { int totcase,i,j,u,v,numcase=0; scanf("%d",&totcase); while(totcase--) { printf("Case #%d:\n",++numcase); scanf("%d",&n); memset(father,0,sizeof(father)); for(i=1;i<=n;i++) doing[i].level = doing[i].work = -1; for(i=1;i<n;i++) { scanf("%d%d",&u,&v); father[u] = v; } scanf("%d",&m); char op[5]; for(i=1;i<=m;i++) { scanf("%s",op); if(op[0] == 'C') { int t; scanf("%d",&t); printf("%d\n",query(t)); } else { int person,work; scanf("%d%d",&person,&work); doing[person].work = work; doing[person].level = i; } } } return 0; }
转载于:https://www.cnblogs.com/nkhelloworld/archive/2012/05/11/2496761.html