利用并查集按秩合并,保存每个点合并的时间;

求时间时,就一直跳u=fa[u],并记录路径上时间的最大值,代表最后一次合并的时间;

因为树高是$log$的,所以时间复杂度是$\mathcal{O}(mlogn)$

#include<cstdio>
#include<iostream>
#define R register int
const int N=;
using namespace std;
inline int g() {
R ret=,fix=; register char ch; while(!isdigit(ch=getchar())) fix=ch=='-'?-:fix;
do ret=ret*+(ch^); while(isdigit(ch=getchar())); return ret*fix;
}
int n,m,tim,lst;
int fa[N],t[N],d[N],rk[N];
int getf(int x) {
if(x==fa[x]) return x;
R ret=getf(fa[x]);
d[x]=d[fa[x]]+; return ret;
}
inline void merge(int u,int v) { ++tim;
u=getf(u),v=getf(v);
if(u==v) return;
if(rk[u]>=rk[v]) fa[v]=u,t[v]=tim;
else fa[u]=v,t[u]=tim;
if(rk[u]==rk[v]) ++rk[u];
}
inline int ask(int u,int v) { R ans=;
if(getf(u)!=getf(v)) return ;
if(d[u]<d[v]) swap(u,v);
while(d[u]!=d[v]) ans=max(ans,t[u]),u=fa[u];
while(u!=v) ans=max(ans,max(t[u],t[v])),u=fa[u],v=fa[v];
return ans;
}
signed main() {
n=g(),m=g(); for(R i=;i<=n;++i) fa[i]=i,rk[i]=,d[i]=;
for(R i=;i<=m;++i) {
R k=g(),u=g(),v=g(); u^=lst,v^=lst;
if(k) printf("%d\n",lst=ask(u,v));
else merge(u,v);
}
}

BZOJ 4668: 冷战 并查集&&暴力LCA(雾)的更多相关文章

  1. bzoj 4668 冷战 —— 并查集按秩合并

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4668 按秩合并维护并查集的树结构,然后暴力找路径上的最大边权即可. 代码如下: #inclu ...

  2. bzoj 4668 冷战——并查集结构

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4668 不路径压缩,维护并查集的树的结构,查询链上最大值.按秩合并就可以暴爬. #includ ...

  3. BZOJ 4668: 冷战 并查集启发式合并/LCT

    挺好想的,最简单的方法是并查集启发式合并,加暴力跳父亲. 然而,这个代码量比较小,比较好写,所以我写了 LCT,更具挑战性. #include <cstdio> #include < ...

  4. [BZOJ 4668]冷战(带边权并查集+启发式合并)

    [BZOJ 4668]冷战(并查集+启发式合并) 题面 一开始有n个点,动态加边,同时查询u,v最早什么时候联通.强制在线 分析 用并查集维护连通性,每个点x还要另外记录tim[x],表示x什么时间与 ...

  5. 【BZOJ 4668 冷战】

    题目: [BZOJ 4668 冷战] 思路: 因为考虑强制在线,我们是肯定要维护形状的 我们发现如果\((u,v)\)这条边如果\(u,v\)已经连上,那么对于最终答案这条边是没有贡献的 所以我们发现 ...

  6. UVaLive 7456 Least Crucial Node (并查集+暴力 或者 求割点)

    题意:求标号最小的最大割点.(删除该点后,指定点#sink能到达的点数减少最多). 析:由于不知道要去掉哪个结点,又因为只有100个结点,所以我们考虑用一个暴力,把所有的结点都去一次,然后用并查集去判 ...

  7. BZOJ 4668 冷战(按秩合并并查集+LCA)

    4668: 冷战 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 627  Solved: 303[Submit][Status][Discuss] D ...

  8. 【bzoj4668】冷战 并查集按秩合并+朴素LCA

    题目描述 1946 年 3 月 5 日,英国前首相温斯顿·丘吉尔在美国富尔顿发表“铁幕演说”,正式拉开了冷战序幕. 美国和苏联同为世界上的“超级大国”,为了争夺世界霸权,两国及其盟国展开了数十年的斗争 ...

  9. BZOJ4668: 冷战 (并查集 + LCA)

    题意:动态给点连边 询问两个点之间最早是在第几个操作连起来的 题解:因为并查集按秩合并 秩最高是logn的 所以我们可以考虑把秩看作深度 跑LCA #include <bits/stdc++.h ...

随机推荐

  1. zabbix api支持的数据类型

    bool flag integer float string timestamp array object query countOutput editable excludeSearch filte ...

  2. zkeacms源码解读一

    1,app.UseZKEACMS 中注册可识别的路由 其中 CMS_Redirection 表中填写了跳转路由  对应的UrlRedirectService中将会读取所有的跳转规则. 有两个路由规则很 ...

  3. latex编译过程-关于嵌入所有字体

    我们的初始目的是想在编译的过程中嵌入所有字体 参考 我们进行了设置,但是不起作用,后发现使用pdflatex编译时是不会调用 ps2pdf的 然后,我们就需要了解编译过程 1. 通常,我们使用texs ...

  4. Ubuntu更改启动内存

    参考:https://superuser.com/questions/152921/how-to-boot-with-mem-1024m-argument-using-grub-ubuntu-10-0 ...

  5. bzoj 3872 [Poi2014]Ant colony——二分答案

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3872 可以倒推出每个叶子节点可以接受的值域.然后每个叶子二分有多少个区间符合即可. 注意一开 ...

  6. 洛谷 P3804 [模板] 后缀自动机

    题目:https://www.luogu.org/problemnew/show/P3804 模仿了一篇题解,感觉很好写啊. 代码如下: #include<cstdio> #include ...

  7. OpenCode:template

    ylbtech-OpenCode: 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   作者:ylbtech出处:http://ylbtec ...

  8. 虚拟机 Linux

    VBox ubuntu安装增强功能

  9. 同时安装Python2与Python3,安装第三方包,老是报错

    同时安装Python2与Python3,安装第三方包,老是报错提示Fatal error in launcher: Unable to create process using '"',那可 ...

  10. jquery 插件 国外

    http://www.jqueryrain.com/demo/jquery-portfolio-gallery-plugin/