zoukankan      html  css  js  c++  java
  • BZOJ 3674 可持久化并查集加强版 可持久化并查集

    题目大意:同3673 强制在线

    同3673 仅仅只是慢了一些0.0

    这道题仅仅写路径压缩比仅仅写启示式合并要快一点点 两个都写就慢的要死0.0

    改代码RE的可能是内存不够

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define M 200200
    using namespace std;
    struct Tree{
    	Tree *ls,*rs;
    	int num;
    }*fa[M],mempool[M*60],*C=mempool;
    int n,m,ans,now,version[M],tot;
    inline Tree* New_Node(Tree *_,Tree *__,int ___)
    {
    	C->ls=_;
    	C->rs=__;
    	C->num=___;
    	return C++;
    }
    Tree* Modify(Tree *p,int x,int y,int pos,int val)
    {
    	int mid=x+y>>1;
    	if(x==y)
    		return New_Node(0x0,0x0,val);
    	if(pos<=mid)
    		return New_Node(Modify(p->ls,x,mid,pos,val),p->rs,0);
    	else
    		return New_Node(p->ls,Modify(p->rs,mid+1,y,pos,val),0);
    }
    int Access(Tree *p,int x,int y,int pos)
    {
    	int mid=x+y>>1;
    	if(x==y)
    		return p->num;
    	if(pos<=mid)
    		return Access(p->ls,x,mid,pos);
    	else
    		return Access(p->rs,mid+1,y,pos);
    }
    int Find(int x)
    {
    	int fx=Access(fa[now],1,n,x);
    	if(!fx)
    		return x;
    	int t=Find(fx);
    	Modify(fa[now],1,n,x,t);
    	return t;
    }
    inline void Unite(int x,int y)
    {
    	int fx=Find(x),fy=Find(y);
    	if(fx==fy)
    		return;
    	++tot;
    	fa[tot]=Modify(fa[now],1,n,fy,fx);
    	now=tot;
    }
    inline bool Query(int x,int y)
    {
    	return Find(x)==Find(y);
    }
    int main()
    {
    	int i,p,x,y;
    	cin>>n>>m;
    	fa[0]=New_Node(C,C,0);
    	for(i=1;i<=m;i++)
    	{
    		scanf("%d",&p);
    		switch(p)
    		{
    			case 1:scanf("%d%d",&x,&y),Unite(x^ans,y^ans);break;
    			case 2:scanf("%d",&x),now=version[x^ans];break;
    			case 3:scanf("%d%d",&x,&y),printf("%d
    ",ans=Query(x^ans,y^ans));break;
    		}
    		version[i]=now;
    	}
    }
    



  • 相关阅读:
    通知
    KVO详解
    KVC详解
    KVC/KVO总结
    结构体Struct
    检测文件(夹)大小
    NSFileHandle&&NSFileManage
    ***NSFileManager
    获取文件扩展名
    MySql数据库_03
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4198682.html
Copyright © 2011-2022 走看看