记录编号 | 438111 | 评测结果 | AAAAAAAAAA | ||
---|---|---|---|---|---|
题目名称 | [HEOI 2016] 树 | 最终得分 | 100 | ||
用户昵称 | 是否通过 | 通过 | |||
代码语言 | 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(){;}