[JZOJ 5782] 城市猎人
思路:
并查集按秩合并维护出现时间。
最早连接时间就是树上连接最大值。
\(qwq\)我居然把路径压缩和按秩合并打到一个程序里了...OvO
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1000010;
struct edge {
int to;
int nxt;
int w;
}e[maxn << 1];
//struct asks{
// int x,y;
//}q[maxn<<1];
int n,m,q,cnt;
int x,y;
int rank[maxn];
int fa[maxn];
int head[maxn];
inline int find(int x) {
return x == fa[x] ? x : find(fa[x]);
}
inline void Add_edge(int u,int v,int w) {
e[++cnt].w = w;
if(rank[u] > rank[v]) {
fa[v] = u;
e[cnt].to = u;
e[cnt].nxt = head[v];
head[v] = cnt;
}
else {
fa[u] = v;
e[cnt].to = v;
e[cnt].nxt = head[u];
head[u] = cnt;
if(rank[u] == rank[v]) rank[u] ++;
}
return;
}
inline int query(int x,int y) {
int dx = 0;
int dy = 0;
int res = 0;
int l = x;
int r = y;
while(fa[l] != l) {
l = fa[l];
dx++;
}
while(fa[r] != r) {
r = fa[r];
dy ++;
}
if(dx < dy) {
swap(dx,dy);
swap(x,y);
}
while(dx > dy) {
res = max(e[head[x]].w,res);
x = fa[x];
dx --;
}
if(x == y) return res;
while(x != y) {
res = max(res,max(e[head[x]].w,e[head[y]].w));
x = fa[x];y = fa[y];
}
return res;
}
int main () {
#ifdef ONLINE_JUDGE
freopen("pictionary.in","r",stdin);
freopen("pictionary.out","w",stdout);
#endif
scanf("%d %d %d",&n,&m,&q);
for(int i = 1;i <= n; ++i) {
fa[i] = i;
}
for(int i = 1;i <= m; ++i){
int d = m - i + 1;
for(int j = d*2;j <= n;j += d) {
Add_edge(find(d),find(j),i);
//cout<<d << ' '<< j<<endl;
}
}
for(int i = 1;i <= q; ++i) {
scanf("%d %d",&x,&y);
printf("%d\n",query(x,y));
}
return 0;
}
[JZOJ 5782] 城市猎人的更多相关文章
- [jzoj 5782]【NOIP提高A组模拟2018.8.8】 城市猎人 (并查集按秩合并+复杂度分析)
传送门 Description 有n个城市,标号为1到n,修建道路花费m天,第i天时,若gcd(a,b)=m-i+1,则标号为a的城市和标号为b的城市会建好一条直接相连的道路,有多次询问,每次询问某两 ...
- HDU 5782 Cycle(KMP+Hash)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5782 [题目大意] 给出两个字符串,判断他们每一个前缀是否循环同构,循环同构的意思就是,字符串首位 ...
- (jzoj snow的追寻)线段树维护树的直径
jzoj snow的追寻 DFS序上搞 合并暴力和,记录最长链和当前最远点,距离跑LCA # include <stdio.h> # include <stdlib.h> # ...
- [jzoj]3506.【NOIP2013模拟11.4A组】善良的精灵(fairy)(深度优先生成树)
Link https://jzoj.net/senior/#main/show/3506 Description 从前有一个善良的精灵. 一天,一个年轻人B找到她并请他预言他的未来.这个精灵透过他的水 ...
- [jzoj]3468.【NOIP2013模拟联考7】OSU!(osu)
Link https://jzoj.net/senior/#main/show/3468 Description osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: ...
- [jzoj]5478.【NOIP2017提高组正式赛】列队
Link https://jzoj.net/senior/#main/show/5478 Description Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校 ...
- [jzoj]1115.【HNOI2008】GT考试
Link https://jzoj.net/senior/#main/show/1115 Description 申准备报名参加GT考试,准考证号为n位数X1X2X3...Xn-1Xn(0<=X ...
- [jzoj]2538.【NOIP2009TG】Hankson 的趣味题
Link https://jzoj.net/senior/#main/show/2538 Description Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫H ...
- [jzoj]4216.【NOIP2015模拟9.12】平方和
Link https://jzoj.net/senior/#main/show/4216 Description 给出一个N个整数构成的序列,有M次操作,每次操作有一下三种: ①Insert Y X, ...
随机推荐
- windows7远程连接服务器出现身份验证错误,又找不到加密Oracle修正
把以下内容复制到文本中, Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Cur ...
- Tomcat爆破
把输入的账户和密码包起来 选择第三个模式 第一个添加用户名 第二个添加: 第三个添加密码 选择编码格式 取消打钩
- Mysql优化-分区
分区简介 分区是根据一定的规则,数据库把一个表分解成多个更小的.更容易管理的部分.就访问数据库应用而言,逻辑上就只有一个表或者一个索引,但实际上这个表可能有N个物理分区对象组成,每个分区都是一个独立的 ...
- sed 一 文本处理工具
简介 sed 采用的是流编辑模式: 最明显的特点是,在 sed 处理数据之前,需要预先提供一组规则,sed 会按照此规则来编辑数据. sed 会根据脚本命令来处理文本文件中的数据,这些命令要么从命令行 ...
- Delphi流
一.流的概念 流简单说是建立在面向对象基础上的一种抽象的处理数据的工具,它定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员只需掌握对流进行操作,而不用关心流的另一头数据的真正流向.其实 ...
- smarty基础总结
前提: 1. 部署smarty模板目录: 2. 编写Smarty类的子类,定制好template_dir.compile_dir.config_dir.cache_dir.left_delimiter ...
- NX二次开发-NXOpen获取边的端点NXOpen::Edge::GetVertices
NX9+VS2012 #include <NXOpen/Features_BlockFeatureBuilder.hxx> #include <NXOpen/Features_Fea ...
- yolov1代码阅读
yolov1使用的backbone是由GoogLeNet启发而来,有24个卷积层,最后接2个全连接层,详细结构如下图: 检测网络的输入分辨率是448X448,最后的特征图大小为7X7.在特征图的每一个 ...
- 用注册表创建无法删除的IE快捷方式
代码如下: Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE/SOFTWARE/Classes/CLSID/{98745625-1234 ...
- LeetCode 744. Find Smallest Letter Greater Than Target (寻找比目标字母大的最小字母)
题目标签:Binary Search 题目给了我们一组字母,让我们找出比 target 大的最小的那个字母. 利用 binary search,如果mid 比 target 小,或者等于,那么移到右半 ...