bzoj 36733674 可持久化并查集加强版(可持久化线段树+启发式合并)

  CCZ在2015年8月25日也就是初三暑假要结束的时候就已经能切这种题了%%%

  学习了另一种启发式合并的方法,按秩合并,也就是按树的深度合并,实际上是和按树的大小一个道理,但是感觉(至少在这题上)更好处理一些。

  然后就用可持久化线段树来维护这个可持久化数组,就能做到可持久化并查集,可持久化平衡树,可持久化之类的云云

  3673不需要按秩合并,3674需要。。。用3674就能过俩,双倍经验双倍的幸福!

#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cmath>
#include<map>
#define ll long long 
using namespace std;
const int maxn=200010,inf=1e9;
struct poi{int lt,rt,fa,dep;}tree[maxn*40];
int n,m,ty,x,y,z,tot,sz;
int root[maxn];
void read(int &k)
{int f=1;k=0;char c=getchar();while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar();while(c<='9'&&c>='0')k=k*10+c-'0',c=getchar();k*=f;
}
void build(int &x,int l,int r)
{x=++sz;if(l==r){tree[x].fa=l;return;}int mid=(l+r)>>1;build(tree[x].lt,l,mid);build(tree[x].rt,mid+1,r);
}
void update(int &x,int l,int r,int cx,int delta)
{tree[++sz]=tree[x];x=sz;if(l==r){tree[x].fa=delta;return;}int mid=(l+r)>>1;if(cx<=mid)update(tree[x].lt,l,mid,cx,delta);else update(tree[x].rt,mid+1,r,cx,delta);
}
void add(int &x,int l,int r,int cx)
{tree[++sz]=tree[x];x=sz;if(l==r){tree[x].dep++;return;}int mid=(l+r)>>1;if(cx<=mid)add(tree[x].lt,l,mid,cx);else add(tree[x].rt,mid+1,r,cx);    
}
int query(int x,int l,int r,int cx)
{if(l==r)return x;int mid=(l+r)>>1;if(cx<=mid)return query(tree[x].lt,l,mid,cx);else return query(tree[x].rt,mid+1,r,cx);    
}
int gf(int k,int x){int xx=query(k,1,n,x);return tree[xx].fa==x?xx:gf(k,tree[xx].fa);}
int main()
{read(n);read(m);build(root[0],1,n);for(int i=1;i<=m;i++){read(ty);root[i]=root[i-1];if(ty==1){read(x);read(y);x=gf(root[i],x);y=gf(root[i],y);if(tree[x].fa==tree[y].fa)continue;if(tree[x].dep>tree[y].dep)swap(x,y);update(root[i],1,n,tree[x].fa,tree[y].fa);if(tree[x].dep==tree[y].dep)add(root[i],1,n,tree[y].fa);}else if(ty==2)read(x),root[i]=root[x];else read(x),read(y),printf("%d\n",tree[gf(root[i],x)].fa==tree[gf(root[i],y)].fa);}return 0;
}
View Code

转载于:https://www.cnblogs.com/Sakits/p/7418281.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/268589.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux apache守护进程,Linux基础命令---httpd守护进程

httpdhttpd是apache超文本传输协议的主程序&#xff0c;它被设计成一个独立运行的守护进程。httpd会建立一个线程池来处理http请求。此命令的适用范围&#xff1a;RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。1、语法httpd [选项]2、参数列表选项说明-d serverroo…

银行家舍入VS四舍五入(下):.NET发现之旅(四)

接上节这一节继续讨论银行家舍入和四舍五入三&#xff0c;自己动手开发四舍五入组件<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />事实上四舍五入在很多项目中还经常使用&#xff0c;所以我们可以动手开发一个这样的组件&…

基础回顾之泛型

1.泛型的优点 1>提高了安全性(将运行期的错误提前到编译器) 2>省去了强转的麻烦 2.<>中只能存放引用数据类型 3.集合前后泛型需要一致,jdk1.7之后,后面的<>中可以不写 4.方法的泛型最好和类的泛型一致 5.方法的泛型若与类的泛型不一致必须在方法前声明自己的…

linux dd安装系统,通过DD命令安装Windows,并介绍几款DD镜像包

Loading...原则上仅适用于独立服务器&#xff0c;并未添加其他虚拟化驱动online/oneprovider/hetzner的服务器已经过测试可以正常使用首先进入服务器的救援系统进入救援系统后使用root权限输入以下命令&#xff0c;然后等待一段时间后可尝试远程连接win10LTSC&#xff1a;wget …

2017.8.23创业项目方向

新型外包服务 除甲醛 催乳师 转载于:https://www.cnblogs.com/wpxuexi/p/7420425.html

FMS3系列(六):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)

FMS开发中&#xff0c;经常会使用共享对象来同步用户和存储数据。对于实现广播文字信息实现聊天的支持非常强大&#xff0c;还可以跟踪用户的时时动作&#xff0c;在开发Flash多人在线游戏中的应用也非常广阔。 在使用FMS开发共享对象时需要注意&#xff0c;只有使用Flash Medi…

表驱动法——直接访问表示例1

表驱动法——直接访问表示例1 《代码大全》看到“表驱动法”一章&#xff0c;以下是表驱动法的第一个方法——直接访问表 import java.util.Scanner; import java.util.Calendar;class DaysPerMonth {public static void main(String[] args) {System.out.println("输入年…

linux原理 培训,Linux容器技术原理和使用

1.1 隔离和共享在一个多员共用的开发环境或者一台服务器运行多个逻辑隔离的服务器进程。谁的运行环境也不希望影响到另一个谁。也就是一个物理机器需要虚拟化出多个环境或者容器。通过提供一种创建和进入容器的方式&#xff0c;操作系统让应用程序就像在独立的机器上运行一样&a…

模态框里使IMG的Src能动态显示

<IMG οnclick"var actionMath.random();this.srcvcode.aspx?actionaction.toString();" />点击图片&#xff0c;只要vcode.aspx能动态输出不同的内容&#xff0c;则IMG控件里的图片也会变动&#xff0c;在模态框里也有效

github和gitlab仓库一起使用

github是网络公有代码仓库&#xff0c;一般用于私人代码托管&#xff0c;而gitlab一般是企业搭建的内部代码仓库。工作期间&#xff0c;我们都会同时用到这两个仓库。可公司邮箱与个人邮箱是不同的&#xff0c;由此产生的 SSH key 也是不同的&#xff0c;这就造成了冲突 。如何…

linux端口被攻击,Linux 常见攻击端口封杀表

Linux常见攻击端口封杀表# Vi /etc/sysconfig/iptables# INPUT-A INPUT -p tcp --dport 135 -j REJECT-A INPUT -p udp --dport 135 -j REJECT-A INPUT -p tcp --dport 136 -j REJECT-A INPUT -p udp --dport 136 -j REJECT-A INPUT -p tcp --dport 137 -j REJECT-A INPUT -p u…

Exchange 2007服务器启动后,Information Store和System Attendant服务不能自动启动

Exchange 2007服务器启动后&#xff0c;Information Store和System Attendant服务不能自动启动 SA和Information服务不会自动启动&#xff0c;手动启动正常1) 在Exchange服务器上添加下面的注册表键值来延迟SA的启动时间HKLM\System\CurrentControlSet\Services\MSExchangeSA\P…

报表简介

帆软报表、华企报表、润乾报表系统、杰表 、数巨报表 1.帆软报表&#xff08;FineReport&#xff09;软件下载地址&#xff1a;http://www.finereport.com/products/trial软件介绍FineReport报表软件是帆软软件&#xff08;中国&#xff09;公司自主研发的一款纯Java编写的企业…

巨型帧linux检测,linux – KVM来宾和主机之间的巨型帧?

我正在尝试为KVM来宾和主机系统之间的存储通信实现9000字节MTU.主机有一个桥接器(br1),其MTU为9000字节&#xff1a;host# ip link show br18: br1: mtu 9000 qdisc noqueue state UPlink/ether fe:54:00:50:f3:55 brd ff:ff:ff:ff:ff:ffinet 172.16.64.1/24 brd 172.16.64.255…