因为bzoj已经凉了, 所以就不放链接了, 把原题目放一下吧, 主要还是题目的思路对吧。

题目描述

1946 年 3 月 5 日,英国前首相温斯顿·丘吉尔在美国富尔顿发表“铁幕演说”,正式拉开了冷战序幕。
美国和苏联同为世界上的“超级大国”,为了争夺世界霸权,两国及其盟国展开了数十年的斗争。在这段时期,虽然分歧和冲突严重,但双方都尽力避免世界范围的大规模战争(第三次世界大战)爆发,其对抗通常通过局部代理战争、科技和军备竞赛、太空竞争、外交竞争等“冷”方式进行,即“相互遏制,不动武力”,因此称之为“冷战”。
Reddington 是美国的海军上将。由于战争局势十分紧张,因此他需要时刻关注着苏联的各个活动,避免使自己的国家陷入困境。苏联在全球拥有 N 个军工厂,但由于规划不当,一开始这些军工厂之间是不存在铁路的,为了使武器制造更快,苏联决定修建若干条道路使得某些军工厂联通。Reddington 得到了苏联的修建日程表,并且他需要时刻关注着某两个军工厂是否联通,以及最早在修建哪条道路时会联通。具体而言,现在总共有M 个操作,操作分为两类:
• 0 u v,这次操作苏联会修建一条连接 u 号军工厂及 v 号军工厂的铁路,注意铁路都是双向的;
• 1 u v, Reddington 需要知道 u 号军工厂及 v 号军工厂最早在加入第几条条铁路后会联通,假如到这次操作都没有联通,则输出 0;作为美国最强科学家, Reddington 需要你帮忙设计一个程序,能满足他的要求。
输入

第一行两个整数 N, M。
接下来 M 行,每行为 0 u v 或 1 u v 的形式。
数据是经过加密的,对于每次加边或询问,真正的 u, v 都等于读入的
u, v 异或上上一次询问的答案。一开始这个值为 0。
1 ≤ N, M ≤ 500000,解密后的 u, v 满足1 ≤ u, v ≤ N, u不等于v

输出

对于每次 1 操作,输出 u, v 最早在加入哪条边后会联通,若到这个操
作时还没联通,则输出 0。

样例输入

5 9
0 1 4
1 2 5
0 2 4
0 3 4
1 3 1
0 7 0
0 6 1
0 1 6
1 2 6

样例输出

0
3
5

#include <iostream>
#include <algorithm>using namespace std;const int N = 500010;int h[N], val[N], deep[N], fa[N], n, m, counts = 1, last;int find(int x)
{if (fa[x] == 0) return x;else{int f = find(fa[x]);deep[x] = deep[fa[x]] + 1;return f;}
}void add(int a, int b, int idx)
{int x = find(a), y = find(b);if (x == y) return;if (h[x] < h[y]) swap(x, y);fa[y] = x;val[y] = idx;h[x] = max(h[x], h[y] + 1);
}void query(int a, int b)
{int x = find(a), y = find(b);last = 0;if (x != y) printf("%d\n", last = 0);else{while (a != b){if (deep[a] < deep[b]) swap(a, b);last = max(last, val[a]);a = fa[a];}cout << last << "\n";}}int main()
{cin >> n >> m;for (int i = 0; i < m; i++){int a, b, c; scanf("%d %d %d", &a, &b, &c);b ^= last, c ^= last;if (a == 0){add(b, c, counts++);}else{query(b, c);}}return 0;}

冷战 (并查集按秩归并)相关推荐

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

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

  2. 【BZOJ4668】冷战 并查集

    [BZOJ4668]冷战 Description 1946 年 3 月 5 日,英国前首相温斯顿·丘吉尔在美国富尔顿发表"铁幕演说",正式拉开了冷战序幕. 美国和苏联同为世界上的& ...

  3. 牛客多校8 - All-Star Game(线段树分治+并查集按秩合并的撤销操作)

    题目链接:点击查看 题目大意:有 n 个球员和 m 个球迷,一个球员可能是多个球迷的粉丝,需要选择最少的球员进行比赛,使得所有的球迷都愿意观看(对于每个球迷来说,都有至少一个其喜欢的球员入选比赛) 对 ...

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

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

  5. HDU 1811 Rank of Tetris(并查集按秩合并+拓扑排序)

    Rank of Tetris Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  6. NOIP2013 D1T3 货车运输 倍增LCA OR 并查集按秩合并

    思路: Kruskal求最大生成树+倍增LCA // by SiriusRen #include <cstdio> #include <cstring> #include &l ...

  7. BZOJ 4668 冷战——并查集+LCA

    基情链接♂BZOJ 1977 严格次小生成树--浅析最近公共祖先(LCA) 目录 一.题目:冷战 1.题目描述 2.输入 3.输出 4.样例输入 5.样例输出 二.题解 三.代码 ​ 谢谢! 一.题目 ...

  8. BZOJ 4668: 冷战 并查集

    Time Limit: 10 Sec Memory Limit: 256 MB Submit: 440 Solved: 215 Description 1946 年 3 月 5 日,英国前首相温斯顿· ...

  9. 0x41.数据结构进阶 - 并查集

    目录 一.路径压缩与按秩合并 1.AcWing 237. 程序自动分析(NOIP2015) 二.边带权并查集 1.AcWing 238. 银河英雄传说(边带权并查集模板) 2.AcWing 239. ...

最新文章

  1. poj 2681 字符串
  2. datatables
  3. mac 开机执行命令
  4. [探讨]一次性工具软件
  5. Html table 实现Excel多格粘贴
  6. linux shell 等待输入_shell中获得用户的输入
  7. VMware vsphere平台中部署 Oracle RAC(二、NTP配置和SSH信任)
  8. 数据产品-指标体系与数据采集
  9. eclipse怎么修改java的行高_eclipse皮肤怎么修改 eclipse皮肤修改教程
  10. IE下,拖动grid的分隔栏,报getBoundingClientRect错误解决办法
  11. Python爬虫从入门到放弃(二十三)之 Scrapy的中间件Downloader Middleware实现User-Agent随机切换...
  12. 在网络蚂蚁中设置代理服务器
  13. 常见的网络协议和端口号
  14. CTF-密码学-位移密码
  15. c语言 word转pdf,超简单的Word转换成PDF技巧,可惜很多人还不会
  16. 电话面试的技巧和注意事项
  17. 产品读书《粉丝经济:传统企业转型互联网的突破口》
  18. 《嵌入式系统原理与应用》 | 嵌入式系统 重点知识梳理
  19. oracle unable to open file,ORA-27041:unable to open file
  20. Boot Loader点点滴滴(转)

热门文章

  1. 网络口碑营销推广,品牌营销选对方式很重要
  2. 带用户名密码的ftp访问路径
  3. Git for windows 和 cygwin
  4. dizcuz手机API-mobile
  5. vue3+Echart
  6. 详解浏览器缓存 前端开发必会
  7. Python循环结构之for
  8. 详解ABAP Selection Screens
  9. Settings搜索栏界面绘制
  10. 基于3D视觉的三维人体重建方法漫谈