BZOJ 3674 可持久化并查集加强版(路径压缩版本)-程序员宅基地

技术标签: php  

/*
bzoj 3674: 可持久化并查集加强版
http://www.lydsy.com/JudgeOnline/problem.php?id=3674
用可持久化线段树维护可持久化数组从而实现可持久化并查集
可持久化线段树+并查集+路径压缩+读入优化
*/
#include <cstdio>
#include <algorithm>
using namespace std;
const int Nmax=200005;
int root_fa[Nmax];

inline int read()
{
    int x=0;char ch=getchar();
    while(ch>'9'||ch<'0')ch=getchar();
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return x;
}
struct Node
{
    int ls;
    int rs;
    int data;
};
Node fa[40*Nmax];
int n,m,ans,a,b,k;
int size_fa;

void build_fa(int &root,int l,int r)
{
    root=size_fa++;
    int mid=(l+r)>>1;
    if(l==r)
    {
        fa[root].data=l;
        return;
    }
    build_fa(fa[root].ls,l,mid);
    build_fa(fa[root].rs,mid+1,r);
}

void insert_fa(int last,int &root,int pos,int data,int l,int r)
{
    fa[size_fa]=fa[last];
    root=size_fa;
    size_fa++;
    if(fa[root].ls==fa[root].rs)
    {
        // printf("root:%d,l:%d,data:%d\n",root,fa[root].l,data);
        fa[root].data=data;
        return;
    }
    int mid=(l+r)>>1;
    if(pos<=mid)
        insert_fa(fa[last].ls,fa[root].ls,pos,data,l,mid);    
    else
        insert_fa(fa[last].rs,fa[root].rs,pos,data,mid+1,r);
}

int search_fa(int root,int pos,int l,int r)
{
    if(fa[root].ls==fa[root].rs)
        return fa[root].data;
    int mid=(l+r)>>1;
    if(pos<=mid)
        return search_fa(fa[root].ls,pos,l,mid);    
    else
        return search_fa(fa[root].rs,pos,mid+1,r);
}

int find(int i,int x)
{
    // if(x==0)
    //     printf("error!!!!\n");
    int fa=search_fa(root_fa[i],x,1,n);
    if(fa==x)
        return fa;
    int t=find(i,fa);
    insert_fa(root_fa[i],root_fa[i],fa,t,1,n);
    return t;
}

void watch(int root,int l,int r)
{
    if(l==r)
    {
        printf("fa[%d]=%d\n",l,fa[root].data);    
        return;
    }
    int mid=(l+r)>>1;
    watch(fa[root].ls,l,mid);
    watch(fa[root].rs,mid+1,r);
}

int main()
{
    // freopen("bzoj3674.in","r",stdin);
    //scanf("%d%d",&n,&m);
    n=read();
    m=read();
    ans=0;
    int q;
    build_fa(root_fa[0],1,n);
    
    // printf("the 0 watch:\n");
    //     watch(root_fa[0],1,n);
    for(int i=1;i<=m;i++)
    {
        //scanf("%d",&q);
        q=read();
        if(q==1)
        {
            a=read();
            b=read();
            // scanf("%d%d",&a,&b);
            a^=ans;b^=ans;
            int rt1=find(i-1,a),rt2=find(i-1,b);
            // printf("root[%d]=%d,root[%d]=%d\n",a,rt1,b,rt2);
            if(rt1==rt2)
                root_fa[i]=root_fa[i-1];
            else
                insert_fa(root_fa[i-1],root_fa[i],rt1,rt2,1,n);
            // printf("search_fa[2]=%d\n",search_fa(root_fa[1],2) );
            // printf("root[%d]=%d,root[%d]=%d\n",a,find(root_fa[i],a),b,find(root_fa[i],b));
        }
        else if(q==2)
        {
            k=read();
            // scanf("%d",&k);
            k^=ans;
            root_fa[i]=root_fa[k];
        }
        else if(q==3)
        {
            a=read();
            b=read();
            // scanf("%d%d",&a,&b);
            root_fa[i]=root_fa[i-1];
            a^=ans;
            b^=ans;
            if(find(i,a)==find(i,b))
                ans=1;
            else
                ans=0;
            printf("%d\n",ans);
        }
        //insert_fa(root_fa[i-1],root_fa[i],2,3);
        // printf("root_fa[%d]:%d\n",i,root_fa[i]);
        // printf("the %d watch:\n",i);
        // watch(root_fa[i],1,n);
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/BBBob/p/6522836.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30332705/article/details/99399867

智能推荐

记录参与Cesium罗盘控件(cesium-navigation-es6)的感想-程序员宅基地

文章浏览阅读2.2k次,点赞5次,收藏4次。Cesium的罗盘控件最早来自于alberto-acevedo/cesium-navigation(226颗星),截至2021-9-21日,最近的更新是两年以前,同时他的使用方式是UMD或requirejs,示例参见这里。然后紧随其后的就是richard1015/cesium-navigation-es6(100颗星,有幸成为这第100颗的收藏者…),创建者是richard1015,截至2021-9-21(中秋节)日,最近的更新是13月以前,当然还有一些issues是开着的,当然这里也有我提出的,原因是在_cesium-navigation-es6

利用验潮站水位数据算surge与skew surge_skew surges 潮汐-程序员宅基地

文章浏览阅读517次。利用前后5个点算skew surge_skew surges 潮汐

【渝粤教育】国家开放大学2018年春季 0689-22T老年心理健康 参考试题_老年心理健康判断题-程序员宅基地

文章浏览阅读75次。编号:0689 座位号2017~2018学年度第二学期期末考试老年心理健康试题2018年7月一、名词解释(本大题共6小题,每题5分,共30分)期待性焦虑忧郁:急躁:暴躁:心理疲劳:家庭暴力:二、判断题(本大题共10小题,每题3分,共30分)正确用“√”表示,错误用“×”表示;答案不填写在答题框内不给分中年人的思维具有现实性、灵活性和智慧性的特点。中年人具有内向、趋于保守,灵活性、应变形差,办事_老年心理健康判断题

IBM的SOA方法论之一——五个切入点和八个场景-程序员宅基地

文章浏览阅读140次。一、什么是SOA: 面向服务的体系结构(Service-Oriented Architecture,SOA)是一种 IT 体系结构风格,支持将您的业务转换为一组相互链接的服务或可重复业务任务,可在需要时通过网络访问这些服务和任务。当在战略业务目标的引导下进行 SOA 实现工作时,可确保对业务进行积极转换,并能够实现 SOA 的好处:IT 与业务的一致性和IT 资产的最大化重用。..._ibm soe sor sol是什么意思

Obsidian 各版本安装包_obsidian安装包 csdn下载-程序员宅基地

文章浏览阅读601次。链接如下:_obsidian安装包 csdn下载

fiddler抓包小技巧之自动保存抓包数据(可根据需求过滤)_fiddler 图片批量保存-程序员宅基地

文章浏览阅读2.9w次,点赞23次,收藏62次。 说起这个抓包啊,大家都不陌生。辣么,将自己抓获的数据保存下来进行数据分析就是个问题了。一般情况下,这个软件就是操作软件的,设置自动保存的话,只能依靠软件自身来设置。但是呢,这个fiddler不得不让我们又一次见识到了它的强大。废话不多说,咱们直接来看配置哈。 首先: 然后选择: 或者你可以直接按Ctrl+R这个组合键,就可以打开CustomRules.js这个文件了。当然..._fiddler 图片批量保存

随便推点

部署SpringBoot项目到windows 服务器_java+springboot项目部署到windowsserver云服务器-程序员宅基地

文章浏览阅读2.7k次,点赞3次,收藏11次。博客引用处(以下内容在原有博客基础上进行补充或更改,谢谢这些大牛的博客指导):部署SpringBoot项目到windows server云服务器一、准备环境。首先考虑,你的项目正常运行需要哪些环境。MySQL,Java,Tomcat 这三种应该是大多人配置项目最基本的环境。安装教程,测试是否正确安装,请自行百度。二、SpringBoot项目的两种打包方式1)传统的war方式,将编译..._java+springboot项目部署到windowsserver云服务器

迈入教育信息化2.0 云桌面助力教与学全面升级-程序员宅基地

文章浏览阅读463次。近日,2018年新媒体新技术教学应用研讨会在广州落下帷幕,这是一次全国教育教学信息化交流展示活动,邀请国内有着大规模应用实践的教育局、学校专家、学者来分享实际教学经验,交流心得体会,探讨创新应用,展望智慧教育新未来。在本次会议上,IT168记者深入采访到了苏州星洲学校信息与总务处主任顾峰、华中师大一附中教研组组长孙俊峰、汕头市澄海广益小学副校长王楚亮以及锐捷网络云桌面产品经理袁野,并与上述专家共同..._教育信息化2.0下学生的学习方式

CUDA入门学习(三):共享内存与线程同步_cuda 向量点乘-程序员宅基地

文章浏览阅读3.1k次。共享内存实际上是可受用户控制的一级缓存。每个SM中的一级缓存与共享内存共享一个64KB的内存段在开普勒架构的设备中,根据应用程序的需要,每个线程块可以配置为16KB的一级缓存或共享内存。而在费米架构的设备中,可以根据喜好选择16KB或者48KB的一级缓存或者共享内存。早期费米架构中只有固定的16KB共享内存而没有一级缓存。共享内存的延迟极低,大约有1.5TB/s的带宽,远远高于全局内存的190GB_cuda 向量点乘

(2017.9.22更新)TrueCrypt中国版CnCrypt V1.23(磁盘加密)_truecrypt:tcciscn2016 pgpdesktop:pgpciscnctf2016-程序员宅基地

文章浏览阅读1.2w次,点赞3次,收藏6次。许多网友在电脑中都有需要保密的文件,如工作文档、私人日记、照片等,经过XX门事件之后,相信各位网友都对自己电脑里的一些隐私文件的保存问题有了更高的安全要求。生活中却有许多的不安全因素会使得这些需要保密的文件遭到泄漏,如黑客入侵、电脑或存储工具丢失、电脑送修等等情况。 为了避免被有心之人轻易获取到保密文件,最方便快捷的方法就是对这些需要保密的文件进行加密处理。别人即使拿到你的文件,也因为没有密码导致无法查看,从而保障你的隐私。 目前市面上的加密软件参差不齐,有的是伪加密,它们所谓的加密只是简单地将文件隐藏_truecrypt:tcciscn2016 pgpdesktop:pgpciscnctf2016

FL Studio 21 for macOS-21.1.0.3267中文直装版功能介绍及系统配置要求_fl studio mac版-程序员宅基地

文章浏览阅读307次,点赞3次,收藏2次。FL Studio 21简称FL水果软件,全称是:Fruity Loops Studio编曲,由于其Logo长的比较像一款水果因此,在大家更多的是喜欢称他为水果萝卜,FL studio21是目前最新的版本,这是一款可以让你的计算机就像是一个全功能的录音室,大混音盘,非常先进的制作软件,让你的音乐突破您的想象。_fl studio mac版

防火墙知识小结_为什么window防火墙属于非活跃状态-程序员宅基地

文章浏览阅读1.1k次。指的是Linux内核中实现包过滤防火墙的内部结构,不以程序或文件的形式存在,属于“内核态”的防火墙功能体系。防火墙是在两个网络通讯时执行的一种访问控制尺度,它能允许你“同意”的人和数据进入你的网络,同时将你“不同意”的人和数据拒之门外,最大限度地阻止网络中的黑客来访问你的网络。Netfilter 所设置的规则是存放在内核内存中的,而 iptables 是一个应用层的应用程序,它通过 Netfilter 放出的接口来对存放在内核内存中的 XXtables(Netfilter的配置表)进行修改。_为什么window防火墙属于非活跃状态

推荐文章

热门文章

相关标签