quailty's Contest #1 道路修建 EXT(启发式合并)
题目链接 道路修建 EXT
考虑并查集的启发式合并,合并的时候小的子树的根成为大的子树的根的儿子。
可以证明这样整棵树的深度不会超过$logn$。
两个根合并的时候,产生的新的边的边权为当前的时间。
那么询问的时候答案就为$x$到$y$的最短路径上的所有边的边权最大值。
#include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (int i(a); i <= (b); ++i)
#define dec(i, a, b) for (int i(a); i >= (b); --i) const int N = 5e5 + 10; int T;
int n, m;
int num;
int ans;
int father[N], c[N], root[N], deep[N], sz[N];
int now;
unordered_set <int> s[N]; int main(){ scanf("%d", &T);
while (T--){
scanf("%d%d", &n, &m);
num = n;
ans = 0;
rep(i, 0, n + 1){
s[i].clear();
s[i].insert(i);
} rep(i, 1, n){
c[i] = 0;
sz[i] = 1;
father[i] = i;
deep[i] = 1;
root[i] = i;
} rep(i, 1, m){
int op, x, y;
scanf("%d%d%d", &op, &x, &y);
x ^= ans;
y ^= ans; if (op == 0){
if (root[x] == root[y]){
printf("%d\n", ans = num);
continue;
} --num;
int fx = root[x], fy = root[y];
if (sz[fx] < sz[fy]){
swap(fx, fy);
swap(x, y);
} c[fy] = i; sz[fx] += sz[fy];
father[fy] = fx;
sz[fy] = 0;
for (auto u : s[fy]){
root[u] = fx;
++deep[u];
s[fx].insert(u);
} s[fy].clear();
printf("%d\n", ans = num);
} else{
if (root[x] != root[y]){
printf("%d\n", ans = 0);
continue;
} now = 0;
if (deep[x] < deep[y]) swap(x, y);
while (deep[x] != deep[y]){
now = max(now, c[x]);
x = father[x];
} while (true){
if (x == y) break;
now = max(now, c[x]);
now = max(now, c[y]);
x = father[x];
y = father[y];
} printf("%d\n", ans = now);
}
}
} return 0;
}
quailty's Contest #1 道路修建 EXT(启发式合并)的更多相关文章
- 【BZOJ-2435】道路修建 (树形DP?)DFS
2435: [Noi2011]道路修建 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3115 Solved: 1002[Submit][Statu ...
- 【bzoj2435】[NOI2011]道路修建
题目描述 在 W 星球上有 n 个国家.为了各自国家的经济发展,他们决定在各个国家之间建设双向道路使得国家之间连通.但是每个国家的国王都很吝啬,他们只愿意修建恰好 n – 1条双向道路. 每条道路的修 ...
- 【NOI2011】道路修建 BFS
[NOI2011]道路修建 Description 在 W 星球上有 n 个国家.为了各自国家的经济发展,他们决定在各个国家之间建设双向道路使得国家之间连通.但是每个国家的国王都很吝啬,他们只愿意修建 ...
- 【BZOJ】2435: [Noi2011]道路修建(树形dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=2435 我怎么感觉那么水.. 坑的是,dfs会爆...好吧..用bfs.. //upd:我的智商也是醉 ...
- bzoj 2435: [Noi2011]道路修建 树上 dp
2435: [Noi2011]道路修建 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...
- 2435: [Noi2011]道路修建 - BZOJ
Description 在 W 星球上有 n 个国家.为了各自国家的经济发展,他们决定在各个国家之间建设双向道路使得国家之间连通.但是每个国家的国王都很吝啬,他们只愿意修建恰好 n – 1条双向道路. ...
- NOI2011道路修建
2435: [Noi2011]道路修建 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1974 Solved: 550[Submit][Status ...
- BZOJ 2435: [Noi2011]道路修建( dfs )
NOI的水题...直接一遍DFS即可 ------------------------------------------------------------------------- #includ ...
- 道路修建 2(自创题+题解)(From NOI2011)
道路修建这道题想来各位不陌生(传送门在此——Bzoj2435),看了此题,一开始以为是最初各个点处于分散状态,然后做了一下,直到发现标程都有点问题,才发现原题是说本来各点已经处于连接完毕的状态(phi ...
随机推荐
- kibana的查询语法
kibana的查询语法是 字段Fields:关键词
- oracle存储过程粗解
存储过程创建的语法: create or replace procedure 存储过程名(param1 in type,param2 out type) as 变量1 类型(值范围);变量2 类型(值 ...
- jQuery选择器之类选择器
类选择器,顾名思义,通过class样式类名来获取节点. 描述: $('.class') 类选择器,相对于id选择器来说,效率相对会低一些,但是优势就是可以多选. 同样的jQuery在实现上,对于类选择 ...
- J2EE的十三个技术——EJB之消息驱动JMS
JMS--Java Message Service JAVA的消息服务,消息可实现两端通信. 用于访问面向消息中间件的标准api,他提供与厂商无关的访问方法,以访问消息收发服务. 特点:即使其中一方不 ...
- SqlHelper——数据库小助手
SqlHelper其实就是一个类. 早就听说过"SqlHelper"这个名词,也查过相关的资料,但还是一头雾水.当真的去实践去用它时,就会发现其实它没那么神秘. 当敲第一个窗体的时 ...
- 一个自动安装LNMP的简洁Shell脚本
此脚本在生产服务器上使用了一年多,本脚本崇尚简单唯美,只需要一个脚本就可以在任何一台有网络的服务器上自动配置LNMP.本脚本会在脚本执行目录下,建packages目录用于存放LNMP所需要的软件.大家 ...
- 逆向映射是干嘛的anon_vma, vma, anon_vma_chain
逆向映射是为了从page得到进程信息,里面有三个比较重要的结构体: mm_area_struct, anon_vma_chain, anon_vma 想象一种复杂的场景 所以其实一个进程对应着很多an ...
- iOS大神班笔记04-View的加载
iOS开发中一个控制器创建View的过程(注意标注的地方): 1.通过storyboard加载 UIStoryboard的三个方法: + (UIStoryboard *)storyboardWithN ...
- aFlex脚本入门
aFlex脚本入门 来源:http://blog.51cto.com/virtualadc/599194 来源:http://blog.51cto.com/virtualadc/624219 对于A1 ...
- [poj] 2074 Line of Sight || 直线相交求交点
原题 给出一个房子(线段)的端点坐标,和一条路的两端坐标,给出一些障碍物(线段)的两端坐标.问在路上能看到完整房子的最大连续长度是多长. 将障碍物按左端点坐标排序,然后用房子的右端与障碍物的左端连线, ...