分析(引入Q神题解  %%%Q)

如果使用可持久化并查集,二分答案判定连通性,复杂度是O(mlog3n),不能在时限内出解。
考虑到并查集实际上是一棵树,可以尝试在边上维护一些信息,假设t时刻加了一条边(u,v),若u和v此时未连通,
则在root(u)和root(v)之间连一条权值为t的边,表示u所在集合以及v所在集合在t时刻连通,
这样对于一组查询(u,v),如果u和v位于同一个连通块内,只需找出并查集中u到v的路径上的权值最大值,
很显然这样是不能路径压缩的,但是可以按秩合并保证树高是O(logn),总的复杂度是O(mlogn)。

这样找到树根是logn,路径查询也是logn 总的是mlogn,关键是代码很好写

#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
typedef long long LL;
const int N=1e5+;
int fa[N],r[N],p[N],vis[N],n;
void init()
{
for(int i=;i<=n;++i)
{
fa[i]=i;
p[i]=r[i]=;
vis[i]=-;
}
}
int find(int x)
{
if(x==fa[x])return x;
return find(fa[x]);
}
bool Union(int u,int v,int t)
{
u=find(u);
v=find(v);
if(u==v)return false;
if(r[u]>r[v])
{
fa[v]=u;
p[v]=t;
}
else
{
fa[u]=v;
p[u]=t;
if(r[u]==r[v])++r[v];
}
return true;
}
int getans(int u,int v)
{
int now=,x=u,ans;
while()
{
vis[x]=now;
if(x==fa[x])break;
now=max(now,p[x]);
x=fa[x];
}
x=v,now=;
while()
{
if(vis[x]!=-)
{
now=max(now,vis[x]);
ans=now;
break;
}
now=max(now,p[x]);
x=fa[x];
}
x=u;
while()
{
vis[x]=-;
if(x==fa[x])break;
x=fa[x];
}
return ans;
}
int main()
{
int T,la,m;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
init(),la=;
int op,u,v,blk=n;
for(int i=;i<=m;++i)
{
scanf("%d%d%d",&op,&u,&v);
u^=la,v^=la;
if(op)
{
int x=find(u);
int y=find(v);
if(x!=y)
la=;
else la=getans(u,v);
printf("%d\n",la);
}
else
{
if(Union(u,v,i))blk--;
la=blk;
printf("%d\n",la);
}
}
}
return ;
}

最新文章

  1. &quot;rel=nofollow&quot;属性
  2. mac系统 下 npm 安装 bower报错
  3. Unrecognized attribute &#39;targetFramework&#39;. Note that attribute names are case-sensitive.
  4. rsync命令(同步/备份数据)
  5. ZeroMQ/jzmq安装使用
  6. 什么是工程师文化?各位工程师是为什么活的?作为一个IT或互联网公司为什么要工程师文化?
  7. mac下配置java环境
  8. flex中创建弹出窗口,并传值
  9. AM335x关于LCD屏幕的时钟PLL配置
  10. 9.Git分支-分支的创建与合并-02
  11. 聚类--K均值算法:自主实现与sklearn.cluster.KMeans调用
  12. anaconda中的包如何传到pycharm中使用?
  13. linux 自总结常用命令(centos系统)
  14. linux网卡桥接问题与docker网卡桥接问题
  15. 20 【python】入门指南:常用数据结构
  16. java操作csv文档通用工具类
  17. 阿里云 Caused by: redis.clients.jedis.exceptions.JedisDataException: ERR invalid password
  18. 在没有界面的类中,实现弹出UIAlertView || 在没有界面的类中,刷新程序界面 思路
  19. GCT英语口语复试中的常见问题总汇
  20. [Luogu 1351] NOIP2014 联合权值

热门文章

  1. python学习笔记21(正则表达式)
  2. linux驱动系列之挂载(转)
  3. C#实现IDispose模式
  4. flex toolTip样式设置
  5. mac下安装应用及常用快捷键
  6. [Ecmall]ECMALL目录结构设置与数据库表
  7. EntityFreamwork 读写分离
  8. android应用崩溃的调试方法(c++ lib so文件库崩溃)
  9. WAMP 80端口被Microsoft-HTTPAPI/2.0占用的解决办法
  10. Python之函数篇