热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[jzoj5782]【NOIP提高A组模拟2018.8.8】城市猎人(并查集按秩合并+复杂度分析)

传送门Description有n个城市,标号为1到n,修建道路花费m天,第i天时,若gcd(a,b)m-i1,

传送门

Description

有n个城市,标号为1到n,修建道路花费m天,第i天时,若gcd(a,b)=m-i+1,则标号为a的城市和标号为b的城市会建好一条直接相连的道路,有多次询问,每次询问某两座城市最早什么时候能连通。

Input

第一行输入三个正整数n,m,q,其中q表示询问个数。
接下来q行,每行两个正整数x,y,表示询问城市x和城市y最早什么时候连通。

Output

输出q行,每行一个正整数,表示最早连通的天数

Sample Input

Input 1
8 3 3
2 5
3 6
4 8
Input 2
25 6 1
20 9
Input 3
9999 2222 2
1025 2405
3154 8949

Sample Output

Output 1
3
1
2
Output 2
4
Output 3
1980
2160

Data Constraint

对于40%的数据&#xff0c;n≤ 1000&#xff0c;q<&#61;100000
对于100%的数据&#xff0c;1 ≤ n,q≤ 100000,1<&#61;m<&#61;q

Solution

可以发现每一天连的边一定是\(m-i&#43;1\)的倍数且不小于n&#xff0c;那么有个结论就是这些边的总数约为\(nlogn\)所以我们可以暴力连边&#xff0c;边权为天数
那么查询的就是两个点到lca路径上的最大边权&#xff0c;考虑按秩合并的并查集&#xff0c;我们知道这个并查集树的深度最大为\(logn\)&#xff0c;所以每次暴力走到lca并找出答案即可

Code

//By Menteur_Hxy
#include
#include
#include
#include
#include
#include
#define M(a,b) memset(a,(b),sizeof(a))
#define F(i,a,b) for(register int i&#61;(a);i<&#61;(b);i&#43;&#43;)
#define R(i,a,b) for(register int i&#61;(b);i>&#61;(a);i--)
#define E(i,u) for(register int i&#61;head[u];i;i&#61;nxt[i])
using namespace std;int read() {int x&#61;0,f&#61;1; char c&#61;getchar();while(!isdigit(c)) {if(c&#61;&#61;&#39;-&#39;)f&#61;-f; c&#61;getchar();}while(isdigit(c)) x&#61;(x<<1)&#43;(x<<3)&#43;c-48,c&#61;getchar();return x*f;
}const int N&#61;100010;
int n,m,q;
int fa[N],dis[N],siz[N],dep[N];int getf(int x) {if(fa[x]&#61;&#61;x) return dep[x]&#61;0,x;int father&#61;getf(fa[x]);dep[x]&#61;dep[fa[x]]&#43;1;return father;
}void add(int u,int v,int c) {int fu&#61;getf(u),fv&#61;getf(v);if(fu!&#61;fv) {if(siz[fu]>siz[fv]) swap(fu,fv);fa[fu]&#61;fv; siz[fv]&#61;max(siz[fv],siz[fu]&#43;1);dis[fu]&#61;c;}
}int main() {freopen("pictionary.in","r",stdin);freopen("pictionary.out","w",stdout);n&#61;read(),m&#61;read(),q&#61;read();F(i,1,n) fa[i]&#61;i,siz[i]&#61;1;F(i,1,m) {int x&#61;m-i&#43;1;for(register int j&#61;1;x*j&#43;x<&#61;n;j&#43;&#43;) add(x*j,x*j&#43;x,i);}F(i,1,q) {int x&#61;read(),y&#61;read(),ans&#61;0;getf(x);getf(y);if(dep[x]dep[y]) ans&#61;max(ans,dis[x]),x&#61;fa[x];while(x!&#61;y) {ans&#61;max(ans,dis[x]),x&#61;fa[x];ans&#61;max(ans,dis[y]),y&#61;fa[y];}printf("%d\n",ans);}return 0;
}

转:https://www.cnblogs.com/Menteur-Hxy/p/9445799.html



推荐阅读
  • 编译原理中的语法分析方法探讨
    本文探讨了在编译原理课程中遇到的复杂文法问题,特别是当使用SLR(1)文法时遇到的多重规约与移进冲突。文章讨论了可能的解决策略,包括递归下降解析、运算符优先级解析等,并提供了相关示例。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 在尝试加载支持推送通知的iOS应用程序的Ad Hoc构建时,遇到了‘no valid aps-environment entitlement found for application’的错误提示。本文将探讨此错误的原因及多种可能的解决方案。 ... [详细]
  • 本文介绍如何手动实现一个字符串连接函数,该函数不依赖于C语言的标准字符串处理函数,如strcpy或strcat。函数原型为void concatenate(char *dest, char *src),其主要作用是将源字符串src追加到目标字符串dest的末尾。 ... [详细]
  • 本题要求计算一组正整数的最小公倍数(LCM)。输入包括多组测试数据,每组数据首先给出一个正整数n,随后是n个正整数。 ... [详细]
  • Logging all MySQL queries into the Slow Log
    MySQLoptionallylogsslowqueriesintotheSlowQueryLog–orjustSlowLog,asfriendscallit.However,Thereareseveralreasonstologallqueries.Thislistisnotexhaustive:Belowyoucanfindthevariablestochange,astheyshouldbewritteninth ... [详细]
  • c语言二元插值,二维线性插值c语言
    c语言二元插值,二维线性插值c语言 ... [详细]
  • 本文详细介绍了如何在循环双链表的指定位置插入新元素的方法,包括必要的步骤和代码示例。 ... [详细]
  • 线段树详解与实现
    本文详细介绍了线段树的基本概念及其在编程竞赛中的应用,并提供了一个具体的线段树实现代码示例。 ... [详细]
  • 本文将深入探讨 Unreal Engine 4 (UE4) 中的距离场技术,包括其原理、实现细节以及在渲染中的应用。距离场技术在现代游戏引擎中用于提高光照和阴影的效果,尤其是在处理复杂几何形状时。文章将结合具体代码示例,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 作为一名Ruby初学者,我对Comparable和Enumerable Mixin的用途感到困惑。本文旨在通过实例详细解释这两个Mixin的功能及其在实际编程中的应用。 ... [详细]
  • UVa 1579 - 套娃问题
    本题主要涉及动态规划(DP)的应用,通过计算将前i个套娃合并成多个套娃组所需的最小操作次数来解决问题。具体来说,f(i) 表示前i个套娃合并成多个套娃组所需的操作次数,其计算公式为 f(i) = min(f(j) + dp(j+1, i))。 ... [详细]
  • linux网络子系统分析(二)—— 协议栈分层框架的建立
    目录一、综述二、INET的初始化2.1INET接口注册2.2抽象实体的建立2.3代码细节分析2.3.1socket参数三、其他协议3.1PF_PACKET3.2P ... [详细]
  • 使用QT构建基础串口辅助工具
    本文详细介绍了如何利用QT框架创建一个简易的串口助手应用程序,包括项目的建立、界面设计与编程实现、运行测试以及最终的应用程序打包。 ... [详细]
  • 本文探讨了如何高效地计算数组中和为2的幂的偶对数量,提供了从基础到优化的方法。 ... [详细]
author-avatar
单身男人adgjm
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有