主席树可持久化数组,还挺好YY的

然而加强版要路径压缩。。

发现压了都RE

结果看了看数据,默默的把让fx的父亲变成fy反过来让fy的父亲变成fx

搞笑啊

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std; int n;
struct chairman_tree
{
int lc,rc,c;
}tr[];int trlen,rt[];
int maketree(int now,int l,int r,int p,int k)
{
if(now==)now=++trlen;
tr[now].lc=tr[now].rc=;
tr[now].c=-; if(l==r)tr[now].c=k;
else
{
int mid=(l+r)/;
if(p<=mid)tr[now].lc=maketree(tr[now].lc,l,mid,p,k);
else tr[now].rc=maketree(tr[now].rc,mid+,r,p,k);
}
return now;
}
int merge(int x,int y)
{
if(x==||y==)return x+y;
tr[x].lc=merge(tr[x].lc,tr[y].lc);
tr[x].rc=merge(tr[x].rc,tr[y].rc);
return x;
} int gofind(int now,int l,int r,int p)
{
if(l==r)return tr[now].c;
int mid=(l+r)/;
if(p<=mid)return gofind(tr[now].lc,l,mid,p);
else return gofind(tr[now].rc,mid+,r,p);
}
int findfa(int t,int x)
{
int F=gofind(rt[t],,n,x);
if(F==x)return x;
int tf=findfa(t,F);
if(tf!=F)
{
int root=rt[t];
rt[t]=maketree(,,n,x,tf);
rt[t]=merge(rt[t],root);
}
return tf;
} int main()
{
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
int Q;
scanf("%d%d",&n,&Q);
trlen=;memset(rt,,sizeof(rt));
for(int i=;i<=n;i++)
{
rt[i]=maketree(rt[i],,n,i,i);
rt[i]=merge(rt[i],rt[i-]);
} int op,x,y,tim=,ans=;
while(Q--)
{
scanf("%d",&op);
if(op==)
{
scanf("%d%d",&x,&y);
int fx=findfa(tim+n,x);
int fy=findfa(tim+n,y);
tim++;
rt[tim+n]=maketree(rt[tim+n],,n,fy,fx);
rt[tim+n]=merge(rt[tim+n],rt[tim+n-]);
}
else if(op==)
{
scanf("%d",&x);
tim++;
rt[tim+n]=rt[x+n];
}
else
{
scanf("%d%d",&x,&y);
int fx=findfa(tim+n,x);
int fy=findfa(tim+n,y);
ans=(fx==fy);
printf("%d\n",ans);
tim++;
rt[tim+n]=rt[tim+n-];
}
}
return ;
}

最新文章

  1. 如何让老Mac机支持USB安装Windows
  2. react4 props 解析
  3. 【转载】教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神
  4. hdu 4712 Hamming Distance(随机函数暴力)
  5. WiFi与WLAN的区别
  6. java正则表达式一:基本使用
  7. permission is only granted to system apps--Android manifest权限问题
  8. 基于Jquery的Ajax分页,只有上一页和下一页
  9. 多线程笔记--原子操作Interlocked系列函数
  10. 201521123100 《Java程序设计》第4周学习总结
  11. java_IO流读取本地文件
  12. KingView 6.53漏洞学习研究
  13. 使用 Flask-Cache 缓存给Flask提速
  14. MAC本apache+php配置虚拟域名时踩的坑
  15. Linux 常用命令,处理端口和Tomcat,mysql
  16. 【转载】Centos系统采用NVM安装Node.js环境
  17. docker+openvswitch实现主机与容器的网络通信
  18. openstack安装-计算节点-neutron服务安装
  19. Dropout的理解
  20. Charles基本使用

热门文章

  1. Android TV 选中高亮显示
  2. SLAM: 图像角点检测的Fast算法(时间阈值实验)
  3. Hadoop-2.2.0在Unbuntu ADM64中需要重新编译Native Lib
  4. [NOI2015]软件包管理器 树链剖分_线段树
  5. linux中tomcat启动脚本:关闭、发布、重启、测试是否成功
  6. PAT_A1155#Heap Paths
  7. 【剑指Offer】53、表示数值的字符串
  8. 优秀的web端 vue框架
  9. 记一次惊心的网站 TCP 队列问题排查经历
  10. 11、mybatis的映射xml中参数类型的别名