[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, ...
随机推荐
- linux 查看服务器序列号(S/N)
[root@node1~]# dmidecode -t 查看支持的参数 dmidecode: option requires an argument -- 't' Type number or key ...
- linux 6 timezone修改
linux 6 / Amazon linux 因为正好在使用Amazon 的linux AMI 又遇到了需要修改系统时区这个case 所以就调查了一下修改方法,因为Amazon的linux版本是由A ...
- 【学术篇】2.28测试T2 线段 拓扑排序
题目: 思路: 看到这种找前后的题目... 第一反应就是拓扑排序_(:з」∠)_ 每条线段都有左右两个端点咯, 然后就乱搞吧.. 我们用\(i\)和\(i'\)分别表示第\(i\)条线段的左右端点.. ...
- PHP算法之有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合.左括号必须以正确的顺序闭合.注意空字符串可被认为是 ...
- 解决小程序sessionid不一致
由于小程序端两次请求的 sessionid 不一致, 导致后端无法取得 session,解决办法:在登录时获取sessionid //第一次请求登录接口时保存到sessionid中 success: ...
- windows10,nodejs安装步骤
系统: windows10 1.下载: https://nodejs.org/en/ 2.下载最新版本,根据你的系统选择32位或者64位: 3.建议选择源码源码安装,不选择编译后的安装 如: 4.进行 ...
- thinkphp cookie支持
系统内置了一个cookie函数用于支持和简化Cookie的相关操作,该函数可以完成Cookie的设置.获取.删除操作. Cookie设置 cookie('name','value'); //设置coo ...
- 2019 hdu多校1
A:一类线性dp,时间卡的有点紧 /* 定义 dp[t][i][j][k]代表填完前 t 个位置后,{0, 1, 2, 3} 这 4 个数字最后一次出现的位置, 排序后为 t, i, j, k(t & ...
- 后缀自动机求字典序第k小的串——p3975
又领悟到了一点新的东西,后缀自动机其实可以分为两个数据结构,一个是后缀树,还有一个是自动机 后缀树用来划分endpos集合,并且维护后缀之间的关系,此时每个结点代表的是一些后缀相同且长度连续的子串 自 ...
- ionic-CSS:ionic 表单和输入框
ylbtech-ionic-CSS:ionic 表单和输入框 1.返回顶部 1. ionic 表单和输入框 list 类同样可以用于 input 元素.item-input 和 item 类指定了文本 ...