传送门

//minamoto
#include<bits/stdc++.h>
using namespace std;
#define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
char buf[1<<21],*p1=buf,*p2=buf;
int read(){
int res,f=1;char ch;
while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1);
for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0');
return res*f;
}
const int N=2e5+5;
int n,m,fa[N<<5],dep[N<<5],L[N<<5],R[N<<5],rt[N],cnt;
void build(int &p,int l,int r){
p=++cnt;if(l==r)return (void)(fa[p]=l);
int mid=(l+r)>>1;
build(L[p],l,mid),build(R[p],mid+1,r);
}
void upd(int &p,int las,int l,int r,int x,int v){
p=++cnt;if(l==r)return (void)(fa[p]=v,dep[p]=dep[las]);
L[p]=L[las],R[p]=R[las];int mid=(l+r)>>1;
x<=mid?upd(L[p],L[las],l,mid,x,v):upd(R[p],R[las],mid+1,r,x,v);
}
int query(int p,int l,int r,int x){
if(l==r)return p;int mid=(l+r)>>1;
return x<=mid?query(L[p],l,mid,x):query(R[p],mid+1,r,x);
}
void add(int p,int l,int r,int x){
if(l==r)return (void)(++dep[p]);
int mid=(l+r)>>1;
x<=mid?add(L[p],l,mid,x):add(R[p],mid+1,r,x);
}
int find(int id,int x){
int fat=query(id,1,n,x);
return x==fa[fat]?fat:find(id,fa[fat]);
}
int main(){
// freopen("testdata.in","r",stdin);
n=read(),m=read(),build(rt[0],1,n);
for(int i=1;i<=m;++i){
int op=read();
switch(op){
case 1:{
int x=read(),y=read();rt[i]=rt[i-1];
int fatx=find(rt[i],x),faty=find(rt[i],y);
if(fatx==faty)continue;if(dep[fatx]>dep[faty])swap(fatx,faty);
upd(rt[i],rt[i-1],1,n,fa[fatx],fa[faty]);
if(dep[fatx]==dep[faty])add(rt[i],1,n,fa[faty]);
break;
}
case 2:{
int k=read();rt[i]=rt[k];
break;
}
case 3:{
int x=read(),y=read();rt[i]=rt[i-1];
int fatx=find(rt[i],x),faty=find(rt[i],y);
puts(fatx==faty?"1":"0");
break;
}
}
}
return 0;
}

最新文章

  1. 【转】ubuntu下最好用的输入法fcitx-sunpinyin
  2. Multiton &amp; Singleton
  3. nyoj 88 汉诺塔(一)
  4. 当LinkButton无效时,光标不显示为手型
  5. [Python][flask][flask-login]关于flask-login中各种API使用实例
  6. jquery利用event.which方法获取键盘输入值的代码
  7. [转]java-Three Rules for Effective Exception Handling
  8. C++ - 派生类访问模板基类(templatized base class)命名
  9. ASP.Net MVC C#画图 页面调用
  10. 浅析JAVA序列化
  11. UNIX网络编程——产生RST
  12. Spring MVC 使用介绍(十二)控制器返回结果统一处理
  13. C语言中数组使用负数值的标记
  14. 进程间通信IPC与Binder机制原理
  15. Atitit 华为管理者内训书系 以奋斗者为本 华为公司人力资源管理纲要 attilax读后感
  16. 周强201771010141《面向对象程序设计Java》第八周学习总结
  17. Android开源框架源码分析:Okhttp
  18. springmvc与struts2的不同
  19. 关于React setState的实现原理(三)
  20. 数学图形(1.38)anguinea曲线

热门文章

  1. [luoguP3402] 最长公共子序列(DP + 离散化 + 树状数组)
  2. 【错误解决】 java.lang.ClassNotFoundException: org.apache.jsp.WEB_002dINF.classes.views.index_jsp
  3. [bzoj4698][Sdoi2008]Sandy的卡片_后缀数组_二分/单调队列_双指针
  4. Java并发包——使用新的方式创建线程
  5. CE310A
  6. WIN10中使用Hyper-V 配置虚拟机宿主机互ping
  7. 微信小程序 wafer2框架摘要
  8. kafka-manager 的编译和使用(附安装包)
  9. “取出数据表中第10条到第20条记录”的sql语句+select top 使用方法
  10. Cocos2D-X2.2.3学习笔记12(瞬时动作)