【BZOJ 4551】【TJOI2016】【HEOI2016】树
http://www.lydsy.com/JudgeOnline/problem.php?id=4551
题目描述
给定一棵有根树(根为 1),有以下两种操作:
1. 标记操作:对某个结点打上标记(在最开始,只有结点1有标记,其他结点均无标记,而且对于某个结点,可以打多次标记。)
2. 询问操作:询问某个结点最近的一个打了标记的祖先(这个结点本身也算自己的祖先)。
输入格式
输入第一行两个正整数 和
分别表示节点个数和操作次数
接下来 行,每行两个正整数
表示
到
有一条有向边
接下来 行,“
”时表示这是一个标记操作,为“
”时表示这是一个询问操作,
输出格式
对于每一个询问操作,输出一个正整数,表示结果。
输入样例
5 5
1 2
1 3
2 4
2 5
Q 2
C 2
Q 2
Q 5
Q 3
输出样例
1
2
2
1
数据范围
题解
初始时打好所有标记,逆序处理,用并查集维护,当遇到一个询问操作时,把标记 ,若此时标记变为
,则将该点与父亲节点合并。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
#define N 1500005
#define depth 32
using namespace std;
int n,q,tot;
struct hh
{int to,next;}e[N<<1];
int fa[N],dep[N],col[N],last[N],f[N],opt[N],x[N],ans[N];
void add(int a,int b)
{
e[++tot].to=b;
e[tot].next=last[a];
last[a]=tot;
}
void dfs(int now)
{
int i;
for(i=last[now];i;i=e[i].next)
if(!dep[e[i].to])
{
dep[e[i].to]=dep[now]+1;
fa[e[i].to]=now;
dfs(e[i].to);
}
}
int read()
{
int ret=0;char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)){
ret=(ret<<1)+(ret<<3)+c-'0';
c=getchar();
}
return ret;
}
int find(int x){return f[x]==x?x:f[x]=find(f[x]);}
int main()
{
int i,j,u,v,fx,fy;
char flag;
n=read();q=read();
for(i=1;i<=n-1;i++)
{
u=read();v=read();
add(u,v); add(v,u);
}
dfs(1);
for(i=1;i<=q;i++)
{
scanf("\n%c",&flag);
if(flag=='C') opt[i]=1;
else opt[i]=2;
x[i]=read();
}
dep[1]=1;col[1]=1;
for(i=1;i<=q;i++)
if(opt[i]==1) col[x[i]]++;
for(i=1;i<=n;i++) f[i]=i;
for(i=2;i<=n;i++)
if(!col[i]) f[find(i)]=find(fa[i]);
for(i=q;i>=1;i--)
if(opt[i]==2) ans[++ans[0]]=find(x[i]);
else
{
col[x[i]]--;
if(!col[x[i]]) f[find(x[i])]=find(fa[x[i]]);
}
for(i=ans[0];i>=1;i--)
printf("%d\n",ans[i]);
return 0;
}
【BZOJ 4551】【TJOI2016】【HEOI2016】树的更多相关文章
- BZOJ 4551: [Tjoi2016&Heoi2016]树
4551: [Tjoi2016&Heoi2016]树 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 748 Solved: 394[Subm ...
- BZOJ 4551[Tjoi2016&Heoi2016]树(树链剖分+二分)
Description 在2016年,佳媛姐姐刚刚学习了树,非常开心.现在他想解决这样一个问题:给定一颗有根树(根为1),有以下两种操作:1. 标记操作:对某个结点打上标记(在最开始,只有结点1有标记 ...
- BZOJ 4551 [Tjoi2016&Heoi2016]树 ——并查集
树剖显然可以做. 然而有一种更神奇的方法,并查集+时光倒流. 每个节点指向它上面最近的标记节点,标记节点指向自己,然后删除标记,就可以用并查集查询了. #include <map> #in ...
- BZOJ 4551: [Tjoi2016&Heoi2016]树 并查集(&&图论?)
反向操作,先把所有的标记都打上(记得统计标记的数目),然后依次撤销,合并到自己的上一个点pre,即fa[u]=getf(pre[u]) #include<cstdio> #include& ...
- bzoj 4551: [Tjoi2016&Heoi2016]树【并查集】
看起来像是并查集,但是是拆集合,考虑时间倒流,先把标记都打上,然后把并查集做出来 每次到一个修改点就把这个点的计数s[u]--,当这个s为0时就把这个点和他的父亲合并(因为可能有多次标记) #incl ...
- [BZOJ4551][TJOI2016&&HEOI2016]树(并查集)
4551: [Tjoi2016&Heoi2016]树 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1746 Solved: 800[Sub ...
- BZOJ_4551_[Tjoi2016&Heoi2016]树_树剖+线段树
BZOJ_4551_[Tjoi2016&Heoi2016]树_树剖+线段树 Description 在2016年,佳媛姐姐刚刚学习了树,非常开心.现在他想解决这样一个问题:给定一颗有根树(根为 ...
- 【BZOJ4551】[Tjoi2016&Heoi2016]树 并查集
[BZOJ4551][Tjoi2016&Heoi2016]树 Description 在2016年,佳媛姐姐刚刚学习了树,非常开心.现在他想解决这样一个问题:给定一颗有根树(根为1),有以下两 ...
- BZOJ 4552: [Tjoi2016&Heoi2016]排序
4552: [Tjoi2016&Heoi2016]排序 Time Limit: 60 Sec Memory Limit: 256 MBSubmit: 579 Solved: 322[Sub ...
- Bzoj 4556: [Tjoi2016&Heoi2016]字符串
4556: [Tjoi2016&Heoi2016]字符串 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 177 Solved: 92[Sub ...
随机推荐
- [GraphQL] Create a GraphQL Schema
we’ll take a look at the GraphQL Language and write out our first GraphQL Schema. We’ll use the grap ...
- CSS - Transform(Translate) abnormal shadow in firefox
问题:当在Firefox中实现动画translate时,会出现虚影的状况: 经查找相关的解决方法,父容器添加样式:outline: 1px solid transparent;//即可解决问题. 但不 ...
- 自动化测试管理平台ATMS(V2.0.1_8.12)下载
自动化测试管理平台ATMS(V2.0.1_8.12)下载: http://automationqa.com/forum.php?mod=viewthread&tid=2701&from ...
- cocos2dx在ubuntu下配置声音引擎
声音引擎库和cocos2dx的库是分开的我们要使用的时候不得不重新修改一下makefile,首先我们要找到声音引擎库的位置,在cocos2dx的 根目录下有一个lib文件,看一下是否存在libcoco ...
- [Z] 计算机类会议期刊根据引用数排名
一位cornell的教授做的计算机类期刊会议依据Microsoft Research引用数的排名 link:http://www.cs.cornell.edu/andru/csconf.html Th ...
- [SQL Server]Index/deadlock
http://www.cnblogs.com/tintown/archive/2005/04/24/144272.html http://coolshell.cn/ http://blogs.msdn ...
- SQL截取字段字符串的方法
set @str='WX15-53-H-53-99-15-335-23'; select @str as '字符串' select len(@str) as '字符长度' select charind ...
- js 获取时间比较全,留备用(zhuan)
var myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年份(4位 ...
- CyanogenMod wiki reading tips | Android tips
To Enable the Developer and Performance settings on CyanogenMod 10.1 In the Settings app, choose the ...
- 用Python开始机器学习(7:逻辑回归分类) --好!!
from : http://blog.csdn.net/lsldd/article/details/41551797 在本系列文章中提到过用Python开始机器学习(3:数据拟合与广义线性回归)中提到 ...