【bzoj4668】冷战 并查集按秩合并+朴素LCA
题目描述
输入
输出
样例输入
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
题解
并查集按秩合并+朴素LCA
首先答案一定是在时间顺序的最小生成森林上,即如果两个点没有连通就把它们连上,最后得到的森林。
那么只需要维护连通性并支持快速查询即可。
考虑使用并查集的按秩合并,即按树高合并,这样树高只有$\log n$,可以使用朴素LCA直接求解。
时间复杂度$O(m\log n)$
- #include <cstdio>
- #include <cstring>
- #include <algorithm>
- #define N 500010
- using namespace std;
- int fa[N] , v[N] , h[N] , cnt , tot;
- int find(int x)
- {
- return fa[x] ? find(fa[x]) : x;
- }
- int deep(int x)
- {
- return fa[x] ? deep(fa[x]) + 1 : 0;
- }
- void add(int x , int y , int z)
- {
- x = find(x) , y = find(y);
- if(x != y)
- {
- cnt ++ ;
- if(h[x] < h[y]) fa[x] = y , v[x] = z;
- else fa[y] = x , v[y] = z;
- if(h[x] == h[y]) h[x] ++ ;
- }
- }
- int query(int x , int y)
- {
- if(find(x) != find(y)) return 0;
- int dx = deep(x) , dy = deep(y) , ans = 0;
- while(dx > dy) ans = max(ans , v[x]) , x = fa[x] , dx -- ;
- while(dx < dy) ans = max(ans , v[y]) , y = fa[y] , dy -- ;
- while(x != y) ans = max(ans , max(v[x] , v[y])) , x = fa[x] , y = fa[y];
- return ans;
- }
- int main()
- {
- int m , opt , x , y , last = 0;
- scanf("%*d%d" , &m);
- while(m -- )
- {
- scanf("%d%d%d" , &opt , &x , &y) , x ^= last , y ^= last;
- if(opt) printf("%d\n" , last = query(x , y));
- else add(x , y , ++tot);
- }
- return 0;
- }
【bzoj4668】冷战 并查集按秩合并+朴素LCA的更多相关文章
- BZOJ4668: 冷战 [并查集 按秩合并]
BZOJ4668: 冷战 题意: 给定 n 个点的图.动态的往图中加边,并且询问某两个点最早什 么时候联通,强制在线. 还可以这样乱搞 并查集按秩合并的好处: 深度不会超过\(O(\log n)\) ...
- bzoj4668: 冷战 并查集按秩合并
题目链接 bzoj4668: 冷战 题解 按秩合并并查集,每次增长都是小集合倍数的两倍以上,层数不超过logn 查询路径最大值 LCT同解 代码 #include<bits/stdc++.h&g ...
- 【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* ...
随机推荐
- RobotFramework:钉钉扫码登录UI自动化
背景: 遇到一个项目,使用的是钉钉扫码登录,一时间不知道该怎么下手了,还是先F12抓包看下都有什么数据传输吧. 分析: 先熟悉下钉钉扫码登录的逻辑,参考官文:https://open-doc.ding ...
- C#的接口基础教程之四 访问接口
对接口成员的访问 对接口方法的调用和采用索引指示器访问的规则与类中的情况也是相同的.如果底层成员的命名与继承而来的高层成员一致,那么底层成员将覆盖同名的高层成员.但由于接口支持多继承,在多继承中,如果 ...
- 如何在Git提交空文件夹
1,git clone url 拉取代码至本地 2,mkdir 文件夹名称 在本地创建文件夹 3,cd 文件夹名称 git init 初始化文件夹 vi .gitkeep 创建.gitkeep文件,内 ...
- 架构图(拓扑图)画图工具分析整理(静态,动态,可交互图.层级tu)
最近要画架构图. 一方面有图片洁癖,另外一方面又不想不停的挪动图片. 一开始想用脑图软件. 发现脑图是树状的,架构模块依赖图是网状的.(也可以简化为层级图,不画交互关系.类似 dubbo 的架构图. ...
- 学习笔记(七): Logistic Regression
目录 Calculating a Probability Model Training 1.Loss function for Logistic Regression 2.Regularization ...
- http 实战练习
http 实战练习 建立httpd服务器,要求提供两个基于名称的虚拟主机: (1)www.X.com,页面文件目录为/web/vhosts/x:错误日志为/var/log/httpd/x.err,访问 ...
- 关于sql查询结果集的链接
开通博客有一段时间了,第一次博文.本身是个理工科的,没啥文采,就想着把平时遇到的问题记录下来,防止自己以后忘了还要去翻找. 今天看到同事写的代码,查询两张表里的数据,结果集类型是一样的.写了两条查询, ...
- tp5.1发送邮件
<?php namespace app\admin\controller; use think\Controller; use think\Request; use PHPMailer\PHPM ...
- PHP代码中出现中文乱码怎么办?
header("Content-type:text/html;charset=utf-8"); //加上这个就OK //示例 : class WechatController ex ...
- JZOJ 4725. 质数序列
Description 由于去NOI的火车“堵”了数不清时间,小Z和小D打完ETG,闲着无聊开始看今年的JSOI省选题,并尝试着修改题目:对于一个长度为L ≥ 2的序列,X:x1,x2,...,xL ...