bzoj 4551
思路:
乱搞;
代码:
- #include <cstdio>
- #include <cstring>
- #include <iostream>
- #include <algorithm>
- using namespace std;
- #define maxn 100005
- #define maxm maxn<<1
- #define maxtree maxn<<2
- int n,head[maxn],E[maxm],V[maxm],cnt,m,deep[maxn],li[maxn],ri[maxn];
- int val[maxtree],L[maxtree],R[maxtree],mid[maxtree],key[maxtree],tmp1,tmp2;
- bool if_[maxtree];
- inline void in(int &now)
- {
- char Cget=getchar();now=;
- while(Cget>''||Cget<'') Cget=getchar();
- while(Cget>=''&&Cget<='')
- {
- now=now*+Cget-'';
- Cget=getchar();
- }
- }
- void dfs(int now,int fa)
- {
- deep[now]=deep[fa]+,li[now]=++cnt;
- for(int i=head[now];i;i=E[i])
- {
- if(V[i]==fa) continue;
- dfs(V[i],now);
- }
- ri[now]=cnt;
- }
- void build(int now,int l,int r)
- {
- L[now]=l,R[now]=r;
- if(l==r)
- {
- if_[now]=true,val[now]=,key[now]=;
- return;
- }
- mid[now]=l+r>>;
- build(now<<,l,mid[now]);
- build(now<<|,mid[now]+,r);
- }
- void change(int now,int l,int r,int va,int ke)
- {
- if(L[now]>=l&&R[now]<=r)
- {
- if(if_[now])
- {
- if(ke>key[now])key[now]=ke,val[now]=va;
- }
- else if_[now]=true,key[now]=ke,val[now]=va;
- return;
- }
- if(l<=mid[now]) change(now<<,l,r,va,ke);
- if(r>mid[now]) change(now<<|,l,r,va,ke);
- }
- void query(int now,int to)
- {
- if(if_[now]&&key[now]>tmp2) tmp1=val[now],tmp2=key[now];
- if(L[now]==R[now]) return;
- if(to<=mid[now]) query(now<<,to);
- else query(now<<|,to);
- }
- int main()
- {
- in(n),in(m);int u,v;
- for(int i=;i<n;i++)
- {
- in(u),in(v);
- E[++cnt]=head[u],V[cnt]=v,head[u]=cnt;
- E[++cnt]=head[v],V[cnt]=u,head[v]=cnt;
- }
- cnt=,dfs(,),build(,,n);
- char op[];
- for(int i=;i<=m;i++)
- {
- scanf("%s",op),in(u);
- if(op[]=='C') change(,li[u],ri[u],u,deep[u]);
- else tmp1=,tmp2=,query(,li[u]),printf("%d\n",tmp1);
- }
- return ;
- }
bzoj 4551的更多相关文章
- BZOJ 4551: [Tjoi2016&Heoi2016]树
4551: [Tjoi2016&Heoi2016]树 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 748 Solved: 394[Subm ...
- 【BZOJ 4551】【TJOI2016】【HEOI2016】树
http://www.lydsy.com/JudgeOnline/problem.php?id=4551 题目描述 给定一棵有根树(根为 1),有以下两种操作:1. 标记操作:对某个结点打上标记(在最 ...
- BZOJ 4551 树
线段树+标记永久化. #include<iostream> #include<cstdio> #include<cstring> #include<algor ...
- BZOJ 4551[Tjoi2016&Heoi2016]树(树链剖分+二分)
Description 在2016年,佳媛姐姐刚刚学习了树,非常开心.现在他想解决这样一个问题:给定一颗有根树(根为1),有以下两种操作:1. 标记操作:对某个结点打上标记(在最开始,只有结点1有标记 ...
- BZOJ 4551: [Tjoi2016&Heoi2016]树 并查集(&&图论?)
反向操作,先把所有的标记都打上(记得统计标记的数目),然后依次撤销,合并到自己的上一个点pre,即fa[u]=getf(pre[u]) #include<cstdio> #include& ...
- BZOJ 4551 [Tjoi2016&Heoi2016]树 ——并查集
树剖显然可以做. 然而有一种更神奇的方法,并查集+时光倒流. 每个节点指向它上面最近的标记节点,标记节点指向自己,然后删除标记,就可以用并查集查询了. #include <map> #in ...
- bzoj 4551: [Tjoi2016&Heoi2016]树【并查集】
看起来像是并查集,但是是拆集合,考虑时间倒流,先把标记都打上,然后把并查集做出来 每次到一个修改点就把这个点的计数s[u]--,当这个s为0时就把这个点和他的父亲合并(因为可能有多次标记) #incl ...
- BZOJ 4551 HEOI 2016 树 (并查集)
思路: 考虑时光倒流 这不就是并查集裸题了-----. //By SiriusRen #include <cstdio> #include <cstring> #include ...
- BZOJ 4551树题解
好吧,洛谷的数据比较水暴力就可以过....(而且跑到飞快) 不过(BZ水不过去)还是讲讲正规的做法. 其实一眼可以看出可以树剖,但是,码起来有点麻烦. 其实有一种更简单的离线做法. 我们很容易联想到并 ...
随机推荐
- 转:EasyJSWebView
EasyJSWebView 是类似 Android javascriptInterface 的 uiwebview js 调用原生代码框架 示例代码: 先建一个MyJSInterface接口 @in ...
- 重定向(Redirect)相关的几个问题
转载自:http://hi.baidu.com/fboosjgvuvckore/item/405a1cd7be2c36e3795daa8b 此次挂接用户中心,交互大都通过重定向(Redirect)实现 ...
- vsCode开发java遇到的问题整理、解决方案(持续更新)
获取控制台输入的信息: 休息launch.json文件中的console属性internalConsole(内部控制台)修改为externalTerminal(外部控制台)即可正常获取输入信息,代码如 ...
- poj 2185 Milking Grid
Milking Grid http://poj.org/problem?id=2185 Time Limit: 3000MS Memory Limit: 65536K Descript ...
- 单进程单线程的Redis如何能够高并发
redis快的原因: 1.纯内存操作2.异步非阻塞 IO 参考文档: (1)http://yaocoder.blog.51cto.com/2668309/888374 (2)http://www.cn ...
- HTML面试基础问题
1.Doctype作用?严格模式与混杂模式如何区分?它们有何意义? 1)<!DICTYPE>声明位于文档中的最前面,处于<html>标签之前,告诉浏览器的解析器,用什么文档 ...
- Header File Dependencies
[Header File Dependencies] 什么时候可以用前置声明替代include? 1.当 declare/define pointer&reference 时. 2.当 dec ...
- 《PHP和MySQL Web开发》读书笔记(下篇)
又与大家见面了.继续<PHP和MySQL Web开发>的总结. Chapter8.设计Web数据库 ·回去看看数据卡那本书吧,这里就不累赘谈这个东西. Chapter9.创建Web数据库 ...
- 20155306 2016-2017-2 《Java程序设计》第6周学习总结
20155306 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 输入/输出 10.1 InputStream与OutputStream 如果要将数据 ...
- HDU 2058 The sum problem 数学题
解题报告:可以说是一个纯数学题,要用到二元一次和二元二次解方程,我们假设[a,b]这个区间的所有的数的和是N,由此,我们可以得到以下公式: (b-a+1)*(a+b) / 2 = N;很显然,这是一个 ...