题面

解析

其实这题可以考虑离线做法,用并查集解决。

因为仔细想,添加标记并不方便,

但如果用并查集记录下祖先,

再一一删除,就会方便很多。

先把每次操作记录下来,

同时记录下每个点被标记的次数(因为有多次标记,所以不能只用bool)。

然后dfs遍历,记录祖先。

再倒序处理,

当一个点的标记被删完时,就把它的并查集指向它的父亲,

并统计答案。

最后输出就行了!

具体看代码:

#include<bits/stdc++.h>
using namespace std; inline int read(){
int sum=,f=;char ch=getchar();
while(ch>'' || ch<''){if(ch=='-')f=-;ch=getchar();}
while(ch>='' && ch<=''){sum=sum*+ch-'';ch=getchar();}
return f*sum;
} struct node{
int to,next;
}e[];
struct hh{
int fa/*爸爸*/,tag/*标记*/;
int col/*并查集*/;
}a[];
struct que{
int id/*节点*/,opt/*操作*/;
int ans;
}qe[];
int head[],cnt=;
int n,q; inline void add(int x,int y){
a[y].fa=x;
e[++cnt].to=head[x];
e[cnt].next=y;
head[x]=cnt;
} int find(int x){
return a[x].col==x? x:find(a[x].col);
} void dfs(int x,int fa){
a[x].fa=fa;
if(a[x].tag) a[x].col=x;
else a[x].col=a[fa].col;
for(int i=head[x];i;i=e[i].to){
int k=e[i].next;
if(k==fa) continue;
dfs(k,x);
}
} int main(){
// freopen("tree.in","r",stdin);
// freopen("tree.out","w",stdout);
n=read();q=read();
a[].tag=;
for(int i=;i<n;i++){
int x=read(),y=read();
add(x,y);
}
for(int i=;i<=q;i++){
char opt;
cin>>opt;
qe[i].id=read();
if(opt=='C'){
qe[i].opt=;
a[qe[i].id].tag++;
}
else if(opt=='Q'){
qe[i].opt=;
}
}
dfs(,);
for(int i=q;i>=;i--){
if(!qe[i].opt){
a[qe[i].id].tag--;
if(!a[qe[i].id].tag) a[qe[i].id].col=a[a[qe[i].id].fa].col;
}
else{
qe[i].ans=find(a[qe[i].id].col);
}
}
for(int i=;i<=q;i++){
if(qe[i].opt){
printf("%d\n",qe[i].ans);
}
}
return ;
}

题解 【HEOI2016】tree树的更多相关文章

  1. POJ3237 Tree 树链剖分 线段树

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - POJ3237 题意概括 Description 给你由N个结点组成的树.树的节点被编号为1到N,边被编号为1 ...

  2. loj#2054. 「TJOI / HEOI2016」树

    题目链接 loj#2054. 「TJOI / HEOI2016」树 题解 每次标记覆盖整棵字数,子树维护对于标记深度取max dfs序+线段树维护一下 代码 #include<cstdio> ...

  3. POJ3237 Tree 树链剖分 边权

    POJ3237 Tree 树链剖分 边权 传送门:http://poj.org/problem?id=3237 题意: n个点的,n-1条边 修改单边边权 将a->b的边权取反 查询a-> ...

  4. Tree( 树) 组件[4]

    本节课重点了解 EasyUI 中 Tree(树)组件的使用方法, 这个组件依赖于 Draggable(拖动)和 Droppable(放置)组件.一.方法列表 //部分方法onClick : funct ...

  5. Tree( 树) 组件[3]

    本节课重点了解 EasyUI 中 Tree(树)组件的使用方法, 这个组件依赖于 Draggable(拖动)和 Droppable(放置)组件.一. 事件列表很多事件的回调函数都包含'node'参数, ...

  6. Tree( 树) 组件[2]

    本节课重点了解 EasyUI 中 Tree(树)组件的使用方法, 这个组件依赖于 Draggable(拖动)和 Droppable(放置)组件.一. 异步加载如果想从数据库里获取导航内容, 那么就必须 ...

  7. Tree( 树) 组件[1]

    本节课重点了解 EasyUI 中 Tree(树)组件的使用方法, 这个组件依赖于 Draggable(拖动)和 Droppable(放置)组件. 一. 加载方式//class 加载方式<ul c ...

  8. JQuery Easy Ui (Tree树)详解(转)

    第一讲:JQuery Easy Ui到底是什么呢? 首先咱们知道JQuery是对Java Script的封装,是一个js库,主要提供的功能是选择器,属性修改和事件绑定等等.. JQuery ui是在j ...

  9. hdu5044 Tree 树链拆分,点细分,刚,非递归版本

    hdu5044 Tree 树链拆分.点细分.刚,非递归版本 //#pragma warning (disable: 4786) //#pragma comment (linker, "/ST ...

  10. hdu_4718_The LCIS on the Tree(树链剖分+线段树合并)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4718 题意:给你一棵树,每个节点有一个值,然后任给树上的两点,问这两点的最长连续递增区间是多少 题解: ...

随机推荐

  1. 链表操作Java实现

    单链表 存储结构 public class ListNode { int i; ListNode next; ListNode(int i) { this.i = i; } public String ...

  2. 函数&回调函数&匿名函数&自调函数

  3. Firebase Chat (firebase 实现web聊天室)

    基于firebase + cloud Function 实现web聊天(demo版) 知识点: 使用Firebase SDK创建Google Cloud功能. 触发云功能基于Auth,云存储和Clou ...

  4. Codeforces 1244D. Paint the Tree

    传送门 首先如果某个点的度数大于 $2$ 那么显然无解 然后考虑点的度数小于等于 $2$ 的情况 发现其实是一条链 一旦确定了链开头的两个点,后面的点的颜色都可以通过之前的点推出 所以直接枚举即可 # ...

  5. nginx + uwsgi 部署django项目

    因项目需求,需要部署django项目,这里是基础的nginx配合uwsgi部署django,后续会采用docker部署的方式 环境: centos7 python3.5.4 django2.1.4 u ...

  6. 怎样使用 Vue 的监听属性 watch ?

    需求: 我需要在某个数据变化时能够执行特定的动作, 比如我在输入框中输入数字 88, 系统检测到以后就会弹窗 拜拜 , 而输入其他字符则不会触发, 这种需求简直多入牛毛, 实际上这就是 自定义事件 , ...

  7. dgv数据绑定后,添加行遇到过的问题并解决

    1. 当控件被数据绑定时,无法以编程方式向 DataGridView 的行集合中添加行 解决方法:((DataTable)Dgv.DataSource).Rows.Add("", ...

  8. jdbc原生操作数据库

    jdbc原生操作数据库流程: 第一步:Class.forName()加载数据库连接驱动: 第二步:DriverManager.getConnection()获取数据连接对象; 第三步:根据 SQL 获 ...

  9. JPanel实现滚动条

    之前一直用JScrollPane里面放一个JTextArea,就可以在文本框内实现滚动条. 但是最近做一个小demo,需要在JPanel中实现滚动条,就找了下资料,做好了,现在记录一下,防止以后再用到 ...

  10. 3.Struts2-Result

    注: 1.在struts.xml文件中使用include标签 可以将另外一个xml文件包含进struts.xml文件中,如: <struts> <constant name=&quo ...