题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4668

不路径压缩,维护并查集的树的结构,查询链上最大值。按秩合并就可以暴爬。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6. const int N=5e5+;
  7. int n,m,fa[N],w[N],siz[N],tot,ans;
  8. int rdn()
  9. {
  10. int ret=;bool fx=;char ch=getchar();
  11. while(ch>''||ch<''){if(ch=='-')fx=;ch=getchar();}
  12. while(ch>=''&&ch<='') ret=(ret<<)+(ret<<)+ch-'',ch=getchar();
  13. return fx?ret:-ret;
  14. }
  15. int find(int a)
  16. {
  17. if(fa[a]==a) return a;
  18. int f=find(fa[a]);
  19. return f;
  20. }
  21. void merge(int u,int v)
  22. {
  23. ++tot;//写在return前!
  24. if(u==v) return;//
  25. if(siz[u]<siz[v]) swap(u,v);
  26. fa[v]=u; siz[u]+=siz[v];
  27. w[v]=tot;
  28. }
  29. void query(int u,int v)
  30. {
  31. int cr=u,d1=,d2=,f1,f2;
  32. while(fa[cr]!=cr)d1++,cr=fa[cr]; f1=cr;
  33. cr=v; while(fa[cr]!=cr)d2++,cr=fa[cr]; f2=cr;
  34. if(f1!=f2){puts("");ans=;return;}
  35. if(d1>d2) swap(u,v),swap(d1,d2);
  36. ans=;
  37. while(d2>d1)
  38. ans=max(ans,w[v]),v=fa[v],d2--;
  39. while(u!=v)
  40. ans=max(ans,max(w[u],w[v])),
  41. u=fa[u],v=fa[v];
  42. printf("%d\n",ans);
  43. }
  44. int main()
  45. {
  46. n=rdn(); m=rdn();
  47. for(int i=;i<=n;i++) fa[i]=i,siz[i]=;
  48. for(int i=,op,u,v;i<=m;i++)
  49. {
  50. op=rdn(); u=rdn()^ans; v=rdn()^ans;
  51. if(!op) merge(find(u),find(v));
  52. else query(u,v);
  53. }
  54. return ;
  55. }

bzoj 4668 冷战——并查集结构的更多相关文章

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

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

  2. BZOJ 4668: 冷战 并查集&&暴力LCA(雾)

    利用并查集按秩合并,保存每个点合并的时间: 求时间时,就一直跳u=fa[u],并记录路径上时间的最大值,代表最后一次合并的时间 #include<cstdio> #include<i ...

  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. 左神算法第五节课:认识哈希函数和哈希表,设计RandomPool结构,布隆过滤器,一致性哈希,岛问题,并查集结构

    认识哈希函数和哈希表 MD5Hash值的返回范围:0~9+a~f,是16位,故范围是0~16^16(2^64)-1, [Hash函数],又叫散列函数: Hash的性质: 1)  输入域无穷大: 2)  ...

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

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

  8. 【BZOJ-4668】冷战 并查集 + 按秩合并 + 乱搞

    4668: 冷战 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 37  Solved: 24[Submit][Status][Discuss] Des ...

  9. BZOJ4668: 冷战 [并查集 按秩合并]

    BZOJ4668: 冷战 题意: 给定 n 个点的图.动态的往图中加边,并且询问某两个点最早什 么时候联通,强制在线. 还可以这样乱搞 并查集按秩合并的好处: 深度不会超过\(O(\log n)\) ...

随机推荐

  1. Vue2.0 视频教程

    好像是一套vue 开发webapp 课程.来自网络. url:https://pan.baidu.com/s/1jIele9w password:b404 文章来源:刘俊涛的博客 地址:http:// ...

  2. vue2 + typescript2 项目开发(环境配置)

    Vue 引入 TypeScript vue init airyland/vux2 projectName 增加开发包的依赖 npm install typescript ts-loader --sav ...

  3. linux中断子系统:中断号的映射与维护初始化mmap过程

    本文均属自己阅读源代码的点滴总结.转账请注明出处谢谢. 欢迎和大家交流.qq:1037701636 email:gzzaigcn2009@163.com 写在前沿: 好久好久没有静下心来整理一些东西了 ...

  4. Android SDK下载速度慢的解决方法(简单使用代理)

    相信做android开发的同学们.一定会遇到的问题就是google那边常常崩,可是学习的開始.我们又必须要用Android SDK,(几个G的大小),一般我们装完ADT之后(假设你用的是Eclipse ...

  5. 点击选中/取消选中flag

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name ...

  6. git操作演示

    阶段一: git init git config --global user.email "you@example.com" git config --global user.na ...

  7. 在Fedora24/25中轻松安装gcc 4.9

    在Fedora24/25中轻松安装gcc 4.9 http://blog.csdn.net/u010158659/article/details/53608285 标签: gccgcc-4.9Fedo ...

  8. EasyDarwin开源流媒体云平台之语音对讲功能设计与实现

    本文由EasyDarwin开源团队成员Alex贡献:http://blog.csdn.net/cai6811376/article/details/52006958 EasyDarwin云平台一直在稳 ...

  9. Routine Subroutine Coroutine 子程序 协程

    https://en.wikipedia.org/wiki/Subroutine In computer programming, a subroutine is a sequence of prog ...

  10. js 中常用的正则表达式

    主要有以下几种: 匹配中文字符的正则表达式: [\u4e00-\u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了哦 获取日期正则表达式:\d{4}[年|\-|\.]\d{1,2}[ ...