Description

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

Input

第一行两个整数 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

Output

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

Sample Input

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

Sample Output

0
3
5

并查集按秩合并。
那么答案就是两点到LCA的路径上的最大边权。
因为按秩合并保证树高是log的,所以直接暴力找LCA就行了
千万不要顺手写了路径压缩, 样例不会调出错的2333.

#include <iostream>
#include <cstdio>
using namespace std;
inline int read() {int res=0;char ch=getchar();while(!isdigit(ch))ch=getchar();while(isdigit(ch))res=(res<<3)+(res<<1)+(ch^48),ch=getchar();return res;
}
#define reg registerint n, m;
int tim;
int fa[500005], val[500005], dep[500005], siz[500005];
int lstans, ans;
int Find(int x) {return fa[x] ? Find(fa[x]) : x;}
int Deep(int x) {return fa[x] ? Deep(fa[x]) + 1 : 0;}int main()
{n = read(), m = read();while(m --){int opt = read(), x = read(), y = read();x ^= lstans, y ^= lstans;if (!opt) {tim++;int fx = Find(x), fy = Find(y);if (fx == fy) continue;if (siz[fx] > siz[fy])  {siz[fx] = max(siz[fx], siz[fy] + 1);fa[fy] = fx;val[fy] = tim;}else {siz[fy] = max(siz[fy], siz[fx] + 1);fa[fx] = fy;val[fx] = tim;}}else  {int fx = Find(x), fy = Find(y);if (fx != fy) {puts("0");lstans=0;continue;}ans = 0;int dx = Deep(x), dy = Deep(y);while (dx > dy) ans = max(ans, val[x]), x = fa[x], dx --;while (dx < dy) ans = max(ans, val[y]), y = fa[y], dy --;while (x != y){ans = max(ans, val[x]);x = fa[x];ans = max(ans, val[y]);y = fa[y];}printf("%d\n", ans);lstans = ans;}}return 0;
}

转载于:https://www.cnblogs.com/BriMon/p/9490269.html

[BZOJ4668] 冷战相关推荐

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

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

  2. 20211229[按秩合并并查集 最小生成树][BZOJ4668]冷战

    20211229[按秩合并并查集.最小生成树][BZOJ4668]冷战 题意:给定N点,动态加边与询问两点最早是哪条边开始连通,强制在线 首先如果离线的话可以直接跑最小生成树,不过代码不好处理. 当然 ...

  3. bzoj4668 冷战

    冷战 Time Limit: 10 Sec Memory Limit: 256 MB Description 1946 年 3 月 5 日,英国前首相温斯顿·丘吉尔在美国富尔顿发表"铁 幕演 ...

  4. NOIP模拟系列 [BZOJ4668]冷战

    这道题我们整个机房讨论将近半个小时没有出结果,算法导论都翻了. 突然,有一个同学用十分暴力的并查集A了,于是大家兴奋地都打了暴力. Sample Input 5 9 0 1 4 1 2 5 0 2 4 ...

  5. 2018.08.21 bzoj4668: 冷战(并查集+启发式合并)

    传送门 可以发现需要维护连通性和两点连通时间. 前者显然是并查集的常规操作,关键就在于如何维护两点的连通时间. 然后会想到这个时候不能用路径压缩了,因为它会破坏原本树形集合的结构,因此可以启发式按si ...

  6. bzoj4668: 冷战

    扔到一个块里是并查集的工作 然后怎样维护最大的时间? 采用不路径压缩的并查集按秩合并保证复杂度,边权为时间,询问时暴力往上跳 一开始以为连接两个联通块要y向x连边并且y的祖先反向连,实际上是不用的,因 ...

  7. [BZOJ4668]冷战

    题目大意: 一个$n(n\le5\times10^5)$个点的图,初始时没有边,有$m(m\le5\times10^5)$次操作,操作包含以下两种: 1.在$u,v$之间连一条无向边: 2.询问$u, ...

  8. 【QBXT】学习笔记——Day3/4图论+dp

    继续上传一波笔记吧. Day3 1.16AM 今天讲图论,以习题为主. 开篇水题: 给一幅图,若删去一个点后变成一棵树,则这个点合法.问哪些点合法. 思路根据树的性质:这个点不是割点,m-这个点的度数 ...

  9. 【BZOJ4668】冷战 并查集

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

最新文章

  1. mac os x 查看网络端口情况
  2. Linux C编程--string.h函数解析
  3. 深入理解Python的With-as语句
  4. 杭电oj2072,2091字符串java实现
  5. /sys/class/gpio 文件接口操作IO端口(s3c2440)
  6. 将字符串转换为数组_LeetCode 树 108.将有序数组转换为二叉搜索树
  7. ToString() 格式化字符串总结
  8. 利用dos进入mysql数据库操作数据
  9. USACO sec2.1 Ordered Fractions
  10. c#:winform中多线程的使用
  11. 双核CPU揭密:英特尔/AMD没有告诉你的五项事实【ZZ】
  12. AbstractQueuedSynchronizer AQS源码分析
  13. C++多线程map读写加锁
  14. idea快捷键汇总mac_IntelliJ IDEA for mac 快捷键大全
  15. win10硬盘读写速度测试-crystaldiskmark
  16. php实现ts流切片,HLS-m3u8播放列表和ts切片(2)
  17. C#实现语音朗读功能
  18. matlab 图像输入/显示等
  19. delphiXE关于线程和多线程、线程的同步与异步执行
  20. Android动画之仿美团加载数据等待时,小人奔跑进度动画对话框(附顺丰快递员奔跑效果)...

热门文章

  1. 笔记本电脑怎么写日记
  2. 继领英后,又一家科技公司宣布离开中国!
  3. SQL实现排序,并输出序号
  4. 做人要厚道--只针对富|士|康进行批判是掩耳盗铃的把戏-之一
  5. 基于人工神经网络的MATLAB手写数字识别系统
  6. matlab如何使用slice,Matlab的slice命令
  7. 大龄程序员求职四处碰壁,不知今后该怎么办!网友:老码农有咩用
  8. 关于ssm文件上传报错400,面对错误我们只能说亚麻跌,达咩,达咩哟!
  9. 一文教你掌握广义估计方程
  10. 【机器学习基石】机器学习的种类(三)