bzoj3673: 可持久化并查集 by zky&&3674: 可持久化并查集加强版
主席树可持久化数组,还挺好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 ;
}
bzoj3673: 可持久化并查集 by zky&&3674: 可持久化并查集加强版的更多相关文章
- 【BZOJ】3673: 可持久化并查集 by zky & 3674: 可持久化并查集加强版(可持久化线段树)
http://www.lydsy.com/JudgeOnline/problem.php?id=3674 http://www.lydsy.com/JudgeOnline/problem.php?id ...
- bzoj3673可持久化并查集 by zky&&bzoj3674可持久化并查集加强版
bzoj3673可持久化并查集 by zky 题意: 维护可以恢复到第k次操作后的并查集. 题解: 用可持久化线段树维护并查集的fa数组和秩(在并查集里的深度),不能路径压缩所以用按秩启发式合并,可以 ...
- [bzoj3673][可持久化并查集 by zky] (rope(可持久化数组)+并查集=可持久化并查集)
Description n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 0& ...
- 【BZOJ 3674】可持久化并查集加强版&【BZOJ 3673】可持久化并查集 by zky 用可持久化线段树破之
最后还是去掉异或顺手A了3673,,, 并查集其实就是fa数组,我们只需要维护这个fa数组,用可持久化线段树就行啦 1:判断是否属于同一集合,我加了路径压缩. 2:直接把跟的值指向root[k]的值破 ...
- BZOJ3673 可持久化并查集 by zky 【主席树】
BZOJ3673 可持久化并查集 by zky Description n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a ...
- 【BZOJ3673】&&【BZOJ3674】: 可持久化并查集 by zky 可持久化线段树
没什么好说的. 可持久化线段树,叶子节点存放父亲信息,注意可以规定编号小的为父亲. Q:不是很清楚空间开多大,每次询问父亲操作后修改的节点个数是不确定的.. #include<bits/stdc ...
- 3673: 可持久化并查集 by zky
3673: 可持久化并查集 by zky Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 2170 Solved: 978[Submit][Status ...
- Bzoj 3673: 可持久化并查集 by zky(主席树+启发式合并)
3673: 可持久化并查集 by zky Time Limit: 5 Sec Memory Limit: 128 MB Description n个集合 m个操作 操作: 1 a b 合并a,b所在集 ...
- bzoj 3673&3674: 可持久化并查集 by zky
Description n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 0& ...
随机推荐
- Android学习——动态注册监听网络变化
新建一个BroadcastTest项目,然后修改MainActivity中的代码,如下: public class MainActivity extends AppCompatActivity { p ...
- Android 打开设置界面或者WiFi连接界面
1.使用APP打开系统的设置界面或者WiFi连接界面 startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); //直接进入手机中的wifi网 ...
- An interesting scroll background------ActionScript3.0
package { /* *@ ClassName : package::backGround *@ INTRO : the continuously scroll background *@ Aut ...
- MVC返回400 /404/...
return new HttpStatusCodeResult(HttpStatusCode.BadRequest); //HttpStatusCode statusCode 枚举 // HttpSt ...
- <转>python 发送邮件实例
文件形式的邮件 #!/usr/bin/env python3 #coding: utf-8 import smtplib from email.mime.text import MIMEText fr ...
- Python-通过configparser读写配置文件
Python读写配置文件: 1.创建配置文件(文件名以.conf或.ini结束的文件表示配置文件) 2.导入所需模块 OS, configparser >>> import os & ...
- DOCKER - J2EE中容器:WEB容器、EJB容器
转自:http://www.voidcn.com/article/p-yizkqdxp-zg.html
- NOIP2012 DAY2 T2借教室
题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自然 ...
- python-windows环境安装
windows下python环境安装 1. 先在官网上下载安装包,官网地址:https://www.python.org/ 点击windows,进入下载选择 选择python3.7.0,点击进入下载, ...
- Intro.js 分步向导插件使用方法
简介 为您的网站和项目提供一步一步的.更好的介绍 Intro.js 目前兼容 Firefox.Chrome 和 IE8,不兼容 IE6 和 IE7,后续版本将会提供更好的兼容. 在线演示及下载 在线演 ...