敲这到题的时候,突然发现自己连数组模拟临界表都不会了 , 罪过,罪过。。。
#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;
for ( ; ~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%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%d",&u,&task);
dfs(u,task);
}
}
}
return 0;
}