题目链接  道路修建 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(启发式合并)的更多相关文章

  1. 【BZOJ-2435】道路修建 (树形DP?)DFS

    2435: [Noi2011]道路修建 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3115  Solved: 1002[Submit][Statu ...

  2. 【bzoj2435】[NOI2011]道路修建

    题目描述 在 W 星球上有 n 个国家.为了各自国家的经济发展,他们决定在各个国家之间建设双向道路使得国家之间连通.但是每个国家的国王都很吝啬,他们只愿意修建恰好 n – 1条双向道路. 每条道路的修 ...

  3. 【NOI2011】道路修建 BFS

    [NOI2011]道路修建 Description 在 W 星球上有 n 个国家.为了各自国家的经济发展,他们决定在各个国家之间建设双向道路使得国家之间连通.但是每个国家的国王都很吝啬,他们只愿意修建 ...

  4. 【BZOJ】2435: [Noi2011]道路修建(树形dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2435 我怎么感觉那么水.. 坑的是,dfs会爆...好吧..用bfs.. //upd:我的智商也是醉 ...

  5. bzoj 2435: [Noi2011]道路修建 树上 dp

    2435: [Noi2011]道路修建 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...

  6. 2435: [Noi2011]道路修建 - BZOJ

    Description 在 W 星球上有 n 个国家.为了各自国家的经济发展,他们决定在各个国家之间建设双向道路使得国家之间连通.但是每个国家的国王都很吝啬,他们只愿意修建恰好 n – 1条双向道路. ...

  7. NOI2011道路修建

    2435: [Noi2011]道路修建 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1974  Solved: 550[Submit][Status ...

  8. BZOJ 2435: [Noi2011]道路修建( dfs )

    NOI的水题...直接一遍DFS即可 ------------------------------------------------------------------------- #includ ...

  9. 道路修建 2(自创题+题解)(From NOI2011)

    道路修建这道题想来各位不陌生(传送门在此——Bzoj2435),看了此题,一开始以为是最初各个点处于分散状态,然后做了一下,直到发现标程都有点问题,才发现原题是说本来各点已经处于连接完毕的状态(phi ...

随机推荐

  1. java线上编程网站

    自带测试 http://codingbat.com/prob/p145416

  2. python-压缩解压

    压缩解压包 #导入模块 import zipfile #新建压缩包并将db与ooo.xml压缩到文件中 z = zipfile.ZipFile('laxi.zip','w') z.write('db' ...

  3. Python全栈工程师(exercises)

    # # 练习: # # 1. 用map函数求: # # 1**3 + 2**3 + 3 ** 3 + .... 9**3 的和 def add_(x): return x ** 3 print(sum ...

  4. windows下vim高亮systemverilog

    主要解决window环境下,vim高亮systemverilog的方法. 第一步:准备材料下载地址:https://files.cnblogs.com/files/aslmer/verilog_sys ...

  5. 深入理解CSS中的margin

    1.css margin可以改变容器的尺寸 元素尺寸 可视尺寸--标准盒子模型中盒子的宽度是不包括margin值的,clientWidth 占据尺寸--包括margin的宽度 outWidth不在标准 ...

  6. 【转】Itween 贝塞尔曲线(一)

    原地址:点击打开链接 1.回调函数 回调函数,即当动画完成时那瞬间需要执行一次的一个函数,it中默认有一个onComplete函数,当动画完成时会自动执行,且你可以提供需要传递的一些参数.见如下代码: ...

  7. Mysql入门的10条语句

    1.查看当前服务器下面,有那些库(database)? 答: show databases; 2.如何创建一个数据库? 答 : create database 最后面在写数据库名:分号结束 3.选择数 ...

  8. 可以在函数中间打点了,以分析bpf_prog_load函数为例

    可以在函数中间打点了, sudo stap -L 'process("./test").statement("func@test.c:10")' //12.10 ...

  9. 测试计划驱动开发模式 TPDD:一种比 TDD 更友好的开发模式

    相信大部分开发团队都在使用TDD,并且还有很多开发团队都 对外声明 在使用 TDD 开发模式. 之所以说是“对外声明”,是因为很多开发团队虽然号称使用的是 TDD 开发模式,实际开发过程中却无法满足 ...

  10. 机器学习-- Logistic回归 Logistic Regression

    转载自:http://blog.csdn.net/linuxcumt/article/details/8572746 1.假设随Tumor Size变化,预测病人的肿瘤是恶性(malignant)还是 ...