好吧,洛谷的数据比较水暴力就可以过。。。。(而且跑到飞快)

不过(BZ水不过去)还是讲讲正规的做法。

其实一眼可以看出可以树剖,但是,码起来有点麻烦。

其实有一种更简单的离线做法。

我们很容易联想到并查集,利用并查集来维护各个点的最近的标记的祖先,但是加入标记后会产生分离的操作,这对并查集来说不好操作

所以我们先将所有的询问读入,将所有的标记都打上去。

从后往前处理。如果有一个点的标记变为了0,就将该点与它的父亲合并。

不知为何,在luogu上跑的比暴力要慢一点。。。。

# include<iostream>
# include<cstdio>
# include<cmath>
# include<cstring>
# include<algorithm>
using namespace std;
const int mn = 100005;
int n,m;
int c[mn],a[mn],fa[mn],ans[mn];
char opt[mn];
struct edge{int next,to;}e[mn*2];
int head[mn],edge_max;
inline void add_edge(int x,int y)
{e[++edge_max]=(edge){head[x],y};head[x]=edge_max;
}
int f[mn];//并查集的fa数组
int find(int x)
{return f[x]==x?x:f[x]=find(f[x]);
}
void dfs(int x)
{f[x]=c[x]?x:fa[x];for(int i=head[x];i;i=e[i].next){int y=e[i].to;if (y!=fa[x]) fa[y]=x,dfs(y);}
}
int main()
{int x,y;scanf("%d%d",&n,&m);for(int i=1;i<n;i++){scanf("%d%d",&x,&y);add_edge(x,y);add_edge(y,x);}c[1]=1;for(int i=1;i<=m;i++){scanf(" %c%d",&opt[i],&a[i]);if (opt[i]=='C') c[a[i]]++;}dfs(1);for(int i=m;i>=1;i--){if (opt[i]=='C'){c[a[i]]--;if(!c[a[i]])f[a[i]]=fa[a[i]];}else ans[i]=find(a[i]);}for(int i=1;i<=m;i++){if(ans[i])printf("%d\n",ans[i]);}return 0;
}

  

转载于:https://www.cnblogs.com/logeadd/p/8685974.html

BZOJ 4551树题解相关推荐

  1. 洛谷P4315 月下“毛景树” 题解

    洛谷P4315 月下"毛景树" 题解 题目链接:P4315 月下"毛景树" 题意:请维护一个数据结构,支持 改第 kkk 条边的边权 结点 uuu 到 vvv ...

  2. 【LG-P4332 [SHOI2014]】三叉神经树 题解

    题面挺有意思(恶心)的. 传送门:P4332 [SHOI2014]三叉神经树 LCT Solution 1 对于每一个非叶子节点 iii,有 valival_ivali​,表示其输出为 1 的儿子的总 ...

  3. [BZOJ 4551][Tjoi2016Heoi2016]树(并查集)

    Description 在2016年,佳媛姐姐刚刚学习了树,非常开心.现在他想解决这样一个问题:给定一颗有根树(根为1),有以下 两种操作:1. 标记操作:对某个结点打上标记(在最开始,只有结点1有标 ...

  4. bzoj 4551: [Tjoi2016Heoi2016]树【并查集】

    看起来像是并查集,但是是拆集合,考虑时间倒流,先把标记都打上,然后把并查集做出来 每次到一个修改点就把这个点的计数s[u]--,当这个s为0时就把这个点和他的父亲合并(因为可能有多次标记) #incl ...

  5. bzoj 4551[Tjoi2016Heoi2016]树

    这题可以用并查集做,一开始统计一下记录每个点被标记了几次,除了被标记过的点外,其他节点都与其父亲所在集合合并,然后倒着做,做的时候如果有节点标记次数变为了0,则将其与其父亲合并. 代码 1 #incl ...

  6. 【业界偷懒】【Public】BZOJ题目一句话题解整理

    转发[Hzwer]: 就当是复习一下自己做过的题,顺便提供一个简要题解给大家看. 做题时候实在想不出来看一下一句话题解,可以有一个提示的作用又不至于一下子知道了全部浪费了一道题吧.. 部分题目(如我A ...

  7. 【醒目】【业界偷懒】【Public】BZOJ题目一句话题解整理

    就当是复习一下自己做过的题,顺便提供一个简要题解给大家看. 做题时候实在想不出来看一下一句话题解,可以有一个提示的作用又不至于一下子知道了全部浪费了一道题吧.. 部分题目(如我A过得大部分奶牛题)是别 ...

  8. BZOJ 4811 树链剖分+线段树

    思路: 感觉这题也可神了.. (还是我太弱) 首先发现每一位不会互相影响,可以把每一位分开考虑,然后用树链剖分或者LCT维护这个树 修改直接修改,询问的时候算出来每一位填0,1经过这条链的变换之后得到 ...

  9. bzoj 4337 树的同构

    4337: BJOI2015 树的同构 Description 树是一种很常见的数据结构. 我们把N个点,N-1条边的连通无向图称为树. 若将某个点作为根,从根开始遍历,则其它的点都有一个前驱,这个树 ...

最新文章

  1. 启明云端分享|ESP32-C3(ESP32­C3­MINI­1)使用的RISC与CISC有什么区别
  2. 牛客题霸 NC22 合并两个有序的数组
  3. python123第6周答案_python123 测验6: 组合数据类型 (第6周)
  4. 一个XP SP3调用0地址蓝屏BUG
  5. 555定时器的应用——单稳态触发器
  6. 且看嘉兴如何“化云为雨”
  7. 如何保证测试的覆盖率
  8. SQL面试经典题(含答案)
  9. PS 自定义画笔工具
  10. 接口性能测试案例分析
  11. 爱上文案——如何写出有销售力的广告文案
  12. [python]python的注释格式
  13. 机器视觉软件EVision介绍
  14. 如何退出SCALA命令界面
  15. Java基础:反射的详细介绍与使用
  16. Python 之 小白爬虫
  17. my.宝石 --- --- ZC 收集
  18. 【数字化】分享-广东省企业首席数据官建设指南
  19. 用QQ邮箱注册到MSN live 账号
  20. iOS 高德地图定位并进行周边搜索

热门文章

  1. 杭州计算机学校哪家好,杭州2021年哪所计算机学校比较好
  2. 计算机信息导论论文,电子信息导论论文2000字
  3. PAT_B_1095_Java(25分)
  4. PAT_B_1040_Java(25分)
  5. C#时间与时间戳格式互相转化
  6. ATLAS数学库编译
  7. 概率占据图(POM)算法理解
  8. pandas数据可视化_5利用Pandas进行强大的可视化以进行数据预处理
  9. 可视化 nltk_词嵌入:具有Genism,NLTK和t-SNE可视化的Word2Vec
  10. 代码review工具:Review Board