BZOJ4668: 冷战 [并查集 按秩合并]
BZOJ4668: 冷战
题意:
给定 n 个点的图。动态的往图中加边,并且询问某两个点最早什
么时候联通,强制在线。
还可以这样乱搞
并查集按秩合并的好处:
- 深度不会超过\(O(\log n)\)
- 树的结构保持较稳定 -> 虽说连边的时候依旧是祖先来连边,但连边不会改变原来的结构,并且(u,v)路径上会经过新连的边
于是就可以乱搞了
维护一个按秩合并的并查集,给连边操作加时间戳,查询的时候暴力求路径上时间戳最大值
PS:暴力lca也是需要deep
PS2:按秩合并是看高度的吧,为什么我的好慢???人傻自带大常数???并且改成启发式合并我的就T掉了
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 5e5+5;
int n, m, fa[N], val[N], he[N], deep[N], tim, ans;
int find(int x) {
if(x == fa[x]) return x;
else {
int f = find(fa[x]);
deep[x] = deep[fa[x]] + 1;
return f;
}
}
void Union(int x, int y) {
tim++;
x = find(x); y = find(y);
if(x == y) return;
if(he[x] < he[y]) swap(x, y);
fa[y] = x;
val[y] = tim;
he[x] = max(he[x], he[y]+1);
}
void Find(int x, int y) {
int fx = find(x), fy = find(y);
ans = 0;
if(fx != fy) cout << ans << '\n';
else {
while(x != y) {
if(deep[x] < deep[y]) swap(x, y);
ans = max(ans, val[x]); x = fa[x];
}
cout << ans << '\n';
}
}
int main() {
freopen("in", "r", stdin);
ios::sync_with_stdio(false); cin.tie(); cout.tie();
cin >> n >> m;
for(int i=1; i<=n; i++) fa[i] = i;
for(int i=1; i<=m; i++) {
int c, x, y;
cin >> c >> x >> y;
x ^= ans; y ^= ans; //printf("hi %d %d %d\n", c, x, y);
if(c == 0) Union(x, y);
else Find(x, y);
}
}
BZOJ4668: 冷战 [并查集 按秩合并]的更多相关文章
- bzoj4668: 冷战 并查集按秩合并
题目链接 bzoj4668: 冷战 题解 按秩合并并查集,每次增长都是小集合倍数的两倍以上,层数不超过logn 查询路径最大值 LCT同解 代码 #include<bits/stdc++.h&g ...
- 【bzoj4668】冷战 并查集按秩合并+朴素LCA
题目描述 1946 年 3 月 5 日,英国前首相温斯顿·丘吉尔在美国富尔顿发表“铁幕演说”,正式拉开了冷战序幕. 美国和苏联同为世界上的“超级大国”,为了争夺世界霸权,两国及其盟国展开了数十年的斗争 ...
- 【BZOJ-4668】冷战 并查集 + 按秩合并 + 乱搞
4668: 冷战 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 37 Solved: 24[Submit][Status][Discuss] Des ...
- bzoj 4668 冷战 —— 并查集按秩合并
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4668 按秩合并维护并查集的树结构,然后暴力找路径上的最大边权即可. 代码如下: #inclu ...
- Dash Speed【好题,分治,并查集按秩合并】
Dash Speed Online Judge:NOIP2016十联测,Claris#2 T3 Label:好题,分治,并查集按秩合并,LCA 题目描述 比特山是比特镇的飙车圣地.在比特山上一共有 n ...
- BZOJ4668: 冷战 (并查集 + LCA)
题意:动态给点连边 询问两个点之间最早是在第几个操作连起来的 题解:因为并查集按秩合并 秩最高是logn的 所以我们可以考虑把秩看作深度 跑LCA #include <bits/stdc++.h ...
- [BZOJ4668]冷战(并查集)
比较自然的思路是,由于需要记录连通块合并时的信息,所以需要建出Kruskal重构树. 需要用LCT维护,支持加点和在线LCA操作. 不妨考虑在并查集合并的同时记录信息,pre[x]表示x与它的父亲相连 ...
- BZOJ4025 二分图 分治 并查集 二分图 带权并查集按秩合并
原文链接http://www.cnblogs.com/zhouzhendong/p/8683831.html 题目传送门 - BZOJ4025 题意 有$n$个点,有$m$条边.有$T$个时间段.其中 ...
- 石头剪刀布(2019Wannafly winter camp day3 i) 带权并查集+按秩合并 好题
题目传送门 思路: 按照题意描述,所有y挑战x的关系最后会形成一棵树的结构,n个人的总方案数是 3n 种,假设一个人被挑战(主场作战)a次,挑战别人(客场)b次,那么这个人存活到最后的方案数就是3n* ...
随机推荐
- JavaScript 修改 CSS 伪类属性
背景 有时候我们希望通过JS代码控制伪类属性, 确苦于对策 实际上可通过向document.head中添加style子元素来实现 演示 function css(style_text) { var s ...
- Redux thunk中间件
redux-thunk https://github.com/reduxjs/redux-thunk Why Do I Need This? Thunks are the recommended mi ...
- Spring.Net 入门学习笔记-----one
一. 基本概念 Spring.Net是一个轻量级的控制反转(Ioc)和面向切面的(Aop)的容器框架: Ioc:控制反转:简单的说就是将创建对象的控制权转交给外部容器(IApplicationC ...
- 关闭QQ右下角弹窗小程序
关闭QQ右下角弹出的广告或新闻等. 程序没有界面,后台运行. #if defined(UNICODE) && !defined(_UNICODE) #define _UNICODE # ...
- 【汇编语言】Win10 安装 DOXBox0.74
1.下载package包,有用的只有前两个. 2.解压 masm 压缩文件,我把它解压到D盘. 3.双击 图1 中的 DOXBox 0.74.exe 进行安装. 4.打开 DOXBox0.74 (参考 ...
- 数据库运维平台~Yearning测试与总结
一 部署 1 docker-compose up -d 即可非常方便 2 mysql安装 3 inception安装二 默认账号 默认用户admin 密码: Yearning_admi ...
- 贯穿RobotFramework框架 - 关键字(一) 最全面的疏理
在RF中,关键字是一个非常重要的存在.想做任何事情,都是通过关键字来实现的. 这篇文章对RobotFramework中的关键字做个整理.大概分为以下几点内容: 1.什么是关键字 2.关键字来自哪里.有 ...
- git工具——对比文件的不同
对比工作区和某个版本中文件的不同: (1)继续编辑文件code.txt,在其中添加一行内容: (2)现在要对比工作区中code.txt和head版本中code.txt的不同,使用如下命令: 前面没有出 ...
- A Discriminative Feature Learning Approach for Deep Face Recognition
url: https://kpzhang93.github.io/papers/eccv2016.pdf year: ECCV2016 abstract 对于人脸识别任务来说, 网络学习到的特征具有判 ...
- React(17)异步组件
26.异步组件当在React里使用异步组件时,核心知识是两个: webpack 如何异步加载其他模块:通过 require(['xxx'], function(module){})来实现:React ...