记录编号 438111 评测结果 AAAAAAAAAA
题目名称 [HEOI 2016] 树 最终得分 100
用户昵称 GravatarHzoi_Mafia 是否通过 通过
代码语言 C++ 运行时间 0.094 s
提交时间 2017-08-15 14:16:00 内存使用 0.81 MiB
显示代码纯文本
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
inline int read(){
	int sum(0);
	char ch(getchar());
	for(;ch<'0'||ch>'9';ch=getchar());
	for(;ch>='0'&&ch<='9';sum=sum*10+(ch^48),ch=getchar());
	return sum;
}
struct edge{
	int e;
	edge *n;
	edge():e(0),n(NULL){}
}a[200005],*pre[100005];
int tot;
inline void insert(int s,int e){
	a[++tot].e=e;
	a[tot].n=pre[s];
	pre[s]=&a[tot];
}
int n,q;
char op[2];
bool bj[100005];
int fa[100005];
inline void dfs(int u){
	for(edge *i=pre[u];i;i=i->n){
		int e(i->e);
		if(e!=fa[u]){
			fa[e]=u;
			dfs(e);
		}
	}
}
inline int query(int u){
	while(!bj[u])
		u=fa[u];
	return u;
}
inline int gg(){
	freopen("heoi2016_tree.in","r",stdin);
	freopen("heoi2016_tree.out","w",stdout);
	memset(pre,NULL,sizeof(pre));
	n=read(),q=read();
	bj[1]=1;
	for(int i=1;i<n;++i){
		int x(read()),y(read());
		insert(x,y),insert(y,x);
	}
	dfs(1);
	while(q--){
		scanf("%s",op);
		int x(read());
		if(op[0]=='Q')
			printf("%d\n",query(x));
		else
			bj[x]=1;
	}
	return 0;
}
int K(gg());
int main(){;}