[jzoj5786]【NOIP2008模拟】观察 (dfs序+lca)
Description
infleaking十分愉快地走在路上,
因为经过1099^9年后,
他得到了一个新技能——观察大法。
刚出来的infleaking就想要挑战自我。
为什么infleaking会这么自信呢?
因为infleaking做到了可以通过观察数据就就可以得出答案。
但是出题人十分不服,想要将infleaking的气焰打压下去,
于是想到了一道题。
结果被infleaking运用他那强大的观察能力看完数据后给出了答案。
怎么能够让infleaking继续下去呢,出题人于是就将数据重出并且加密了。
没有能直接观察数据的infleaking十分不服气,想要解决这道题,
但是苦于不能直接使用他的新技能,所以想要请聪明的你帮infleaking解决这个问题。
出题人给出一颗以1为根的树,一开始每个节点都是一颗棋子,一面白一面黑,白色的面朝上
接下来就q次操作,操作分两种
0操作 将一个颗棋子翻转
1操作 询问一颗棋子与所有面朝上为黑色的棋子lca最深的那个的编号
Input
第1行,两个正整数n,q
第2行,一共n-1个正整数,第i个正整数表示i+1号结点的父亲
第3~q+3每行两个整数x ,第|x|个为被操作的棋子,x>0操作为0否则为1
Output
对于每个op为1的操作输出对应的编号,若场上没有黑棋子输出0
Sample Input
10 10
6 2 7 9 1 10 5 4 3
-2
1
3
3
-5
8
1
4
-1
-5
Sample Output
0
1
1
5
Data Constraint
aaarticlea/png;base64,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" alt="">
Solution
查询时找dfn序比它小和dfn序比它大的第一个黑点的lca即可
直接dfs会溢栈,不会手写栈,bfs水过qwq
Code
//By Menteur_Hxy
#pragma GCC diagnostic error "-std=c++11"
#pragma GCC optimize("-fdelete-null-pointer-checks,inline-functions-called-once,-funsafe-loop-optimizations,-fexpensive-optimizations,-foptimize-sibling-calls,-ftree-switch-conversion,-finline-small-functions,inline-small-functions,-frerun-cse-after-loop,-fhoist-adjacent-loads,-findirect-inlining,-freorder-functions,no-stack-protector,-fpartial-inlining,-fsched-interblock,-fcse-follow-jumps,-fcse-skip-blocks,-falign-functions,-fstrict-overflow,-fstrict-aliasing,-fschedule-insns2,-ftree-tail-merge,inline-functions,-fschedule-insns,-freorder-blocks,-fwhole-program,-funroll-loops,-fthread-jumps,-fcrossjumping,-fcaller-saves,-fdevirtualize,-falign-labels,-falign-loops,-falign-jumps,unroll-loops,-fsched-spec,-ffast-math,Ofast,inline,-fgcse,-fgcse-lm,-fipa-sra,-ftree-pre,-ftree-vrp,-fpeephole2",3)
#pragma GCC target("avx","sse2")
//以上自动忽略qwq
#include<set>
#include<cstdio>
#include<vector>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define int long long
#define F(i,a,b) for(register int i=(a);i<=(b);i++)
#define R(i,a,b) for(register int i=(b);i>=(a);i--)
#define E(i,u) for(register int i=head[u];i;i=nxt[i])
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin)),p1==p2?EOF:*p1++)
using namespace std;
typedef long long LL;
char buf[1<<21],*p1,*p2;
inline int read() {
int x=0,f=1; char c=getchar();
while(!isdigit(c)) {if(c=='-')f=-f;c=getchar();}
while(isdigit(c)) x=(x<<1)+(x<<3)+c-48,c=getchar();
return x*f;
}
const int N=800010;
int n,q,tot,cnt;
int dfn[N],id[N],f[N][24],dep[N],nxt[N],to[N],head[N],siz[N],que[N];
set <int> S;
set <int>::iterator it;
int lca(int x,int y) {
if(dep[x]<dep[y]) swap(x,y);
int need=dep[x]-dep[y];
for(int i=0;need;need>>=1,i++) if(need&1) x=f[x][i];
if(x!=y) {
R(i,0,21) if(f[x][i]!=f[y][i])
x=f[x][i],y=f[y][i];
return f[x][0];
}
return x;
}
void dfs(int u) {
siz[u]=1;
dfn[u]=++tot; id[dfn[u]]=u;
E(i,u) {
int v=to[i];
dep[v]=dep[u]+1;
f[v][0]=u;
dfs(v);
siz[u]+=siz[v];
}
}
void bfs1() {
int h=0,t=1;
que[++h]=1;
while(h<=t) {
int u=que[h++];
siz[u]=1;
E(i,u) {
int v=to[i];
dep[v]=dep[u]+1,f[v][0]=u;
que[++t]=v;
}
}
R(i,1,n) siz[f[que[i]][0]]+=siz[que[i]];
}
void bfs2() {
int h=0,t=1;
que[++h]=1;dfn[1]=1; id[dfn[1]]=1;
while(h<=t) {
int u=que[h++],last=u;
E(i,u) {
int v=to[i];
dfn[v]=dfn[last]+(last!=u?siz[last]:1);
id[dfn[v]]=v;
que[++t]=v;
last=v;
}
}
}
#define add(a,b) nxt[++cnt]=head[a],to[cnt]=b,head[a]=cnt
signed main() {
freopen("watch.in","r",stdin);
freopen("watch.out","w",stdout);
n=read(),q=read();
F(i,1,n-1) {int u=read();add(u,i+1);}
// dfs(1); 通往溢栈的钥匙233
bfs1(),bfs2();
// F(i,1,n) printf("%d ",dep[i]);putchar('\n');
for(register int j=1;(1<<j)<=n;j++)
F(i,1,n) if(f[i][j-1])
f[i][j]=f[f[i][j-1]][j-1];
dep[0]=-1;
F(i,1,q) {
int x=read(),fla=0;
if(x<0) fla=1,x=-x;
if(!fla) {
if(!S.insert(dfn[x]).second) S.erase(dfn[x]);
continue;
}
if(S.empty()) {
putchar('0');
putchar('\n');
continue;
}
int t1=0,t2=0;
it=S.lower_bound(dfn[x]);
if(it!=S.end()) t1=lca(x,id[*it]);
if(it!=S.begin()) it--,t2=lca(x,id[*it]);
// __builtin_printf("%d %d\n",t1,t2);
if(dep[t1]<dep[t2]) printf("%d\n",t2);
else printf("%d\n",t1);
}
return 0;
}
[jzoj5786]【NOIP2008模拟】观察 (dfs序+lca)的更多相关文章
- BZOJ3991 [SDOI2015]寻宝游戏 【dfs序 + lca + STL】
题目 小B最近正在玩一个寻宝游戏,这个游戏的地图中有N个村庄和N-1条道路,并且任何两个村庄之间有且仅有一条路径可达.游戏开始时,玩家可以任意选择一个村庄,瞬间转移到这个村庄,然后可以任意在地图的道路 ...
- BZOJ 3083: 遥远的国度 [树链剖分 DFS序 LCA]
3083: 遥远的国度 Time Limit: 10 Sec Memory Limit: 1280 MBSubmit: 3127 Solved: 795[Submit][Status][Discu ...
- HDU 3966 dfs序+LCA+树状数组
题目意思很明白: 给你一棵有n个节点的树,对树有下列操作: I c1 c2 k 意思是把从c1节点到c2节点路径上的点权值加上k D c1 c2 k 意思是把从c1节点到c2节点路径上的点权值减去k ...
- bzoj2819 DFS序 + LCA + 线段树
https://www.lydsy.com/JudgeOnline/problem.php?id=2819 题意:树上单点修改及区间异或和查询. 思维难度不高,但是题比较硬核. 整体思路是维护每一个结 ...
- 蓝皮书:异象石 【dfs序+lca】
题目详见蓝皮书[算法竞赛:进阶指南]. 题目大意: 就是给你一颗树,然后我们要在上面进行三种操作: 1.标记某个点 或者 2.撤销某个点的标记 以及 3.询问标记点在树上连通所需的最短总边 ...
- HDU 6203 ping ping ping(dfs序+LCA+树状数组)
http://acm.hdu.edu.cn/showproblem.php?pid=6203 题意: n+1 个点 n 条边的树(点标号 0 ~ n),有若干个点无法通行,导致 p 组 U V 无法连 ...
- HDU 5296 Annoying problem dfs序 lca
Annoying problem 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5296 Description Coco has a tree, w ...
- Gym 101142G : Gangsters in Central City(DFS序+LCA+set)
题意:现在有一棵树,1号节点是水源,叶子节点是村庄,现在有些怪兽会占领一些村庄(即只占领叶子节点),现在要割去一些边,使得怪兽到不了水源.给出怪兽占领和离开的情况,现在要割每次回答最小的割,使得怪兽不 ...
- POJ 2763 Housewife Wind(DFS序+LCA+树状数组)
Housewife Wind Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 11419 Accepted: 3140 D ...
随机推荐
- 【转】C语言条件编译及编译预处理阶段
原文: http://www.cnblogs.com/rusty/archive/2011/03/27/1996806.html 1. 宏定义(宏代换,宏替换,宏: 宏定义是C语言提供的3中预处理功能 ...
- 欣喜若狂!今天最终成功把音频导入到iphone了,大半年的努力,靠的毅力和方法
研究IOS 的助手也有大半年时间了,一直没有实现导入音视频文件的功能,主要是过程太复杂,而且基本上没有资料能够查询.经过不懈的努力,今天最终成功导入了一个mp3 文件到ipod,一切功能正常,期间经历 ...
- mongoDB学习笔记——在C#中查询
1.下载安装 想要在C#中使用MongoDB,首先得要有个MongoDB支持的C#版的驱动.C#版的驱动貌似有很多种,如官方提供的samus. 实现思路大都类似.这里我们用官方提供的mongo-csh ...
- uboot向内核模块传递参数的方法
1 模块参数 定义模块参数 1 module_param(name, type, perm); 定义一个模块参数, name 变量名 type 数据类型 bool:布尔型 invbool:一个布尔型( ...
- 使用 Swift 3.0 操控日期
作者:Joe,原文链接,原文日期:2016-09-20译者:Cwift:校对:walkingway:定稿:CMB 当你在想要 大规模重命名 时,一个附带的挑战就是要确保所有相关的文档都必须同步更新.比 ...
- Java-JRE:JRE百科
ylbtech-Java-JRE:JRE百科 JRE是Java Runtime Environment缩写,指Java运行环境,是Sun的产品.运行JAVA程序所必须的环境的集合,包含JVM标准实现及 ...
- 运行项目psychologicalTest
[mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 [mysqld] #设置3306端口 port = 3306 # 设置mysql的安装目录 b ...
- php write excel
/** * 写excel方法 */ function writeExcel($tabArr, $dataArr,$path) { require_once CODE_BASE2 . '/util/ph ...
- PCB Genesis增加点阵字 实现原理
我们采用Genesis增加点阵字时,用Genesis增加Canned Text即可,但奥宝中文不支持,且字符种类是有限的呀 不过没关系,没有自己造呀.在这里我分享一种增加点阵字的实现方法 一.通过代码 ...
- IP Address
http://poj.org/problem?id=2105 #include<stdio.h> #include<string.h> int main() { ]; ] = ...