LCMs:很好的数论和构造题。

显然我们不可以直接建图跑最短路。

于是考虑分讨。

倍数关系

答案显然为 \(\max(a,b)\)。

相等关系

答案显然为 \(0\)。

\(\gcd(a,b)>1\)

我们可以先走到 \(\gcd(a,b)\) 处,再到达 \(b\),答案为 \(a+b\)。

\(\gcd(a,b)=1\)

直接分讨不太好做,我们考虑用一点时间换取代码的简洁。

可以发现,我们中间会用到的点只有 \(3\) 个:\(minp_a,minp_b,2\),其中 \(minp_x\) 表示数 \(x\) 的最小质因数。

为什么要用最小的?因为既然 \(a,b\) 已经互质,所以无论如何转化到哪一步它都是互质的,我们就要尽可能减小这一步中转的代价。这就是 \(minp\) 的由来。

那么我们化为最小质因子后,就直接是两个数的积了吗?并不是,我们还可以发现这一个构造:\(minp_a \to 2 \to minp_b\)。可以让这一步的代价变为 \(minp_a\times 2+minp_b \times 2\)。并且其他数显然做这个中转点不优,因为 \(a,b\) 已经是最小质因子了。

于是选这 \(5\) 个点出来,跑 Floyd 即可。要是愿意写,写单源最短路也可以。

时间 \(O(t \sqrt {n})\)。

代码

/*
1. 倍数关系,ans=max(a,b);
2. 相等关系,ans=0;
3. 互质关系,找出 a,b,minp_a,minp_b,2 这 5 个点跑最短路,因为要使分别的质因数最小(中转的代价最小),显然选其他质因数必定不优
4. 有公因数关系:走到 gcd 处,答案为 a+b;
时间 O(sqrt(n)t)
*/ #include <bits/stdc++.h>
#define fi first
#define se second
#define lc (p<<1)
#define rc ((p<<1)|1)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pi;
int t;
ll d[10][10];
vector<int>g;
ll gcd(ll a,ll b)
{
if(b==0)return a;
return gcd(b,a%b);
}
ll lcm(ll a,ll b)
{
return b/gcd(a,b)*a;
}
void floyd()
{
for(int i=0;i<g.size();i++)
{
for(int j=0;j<g.size();j++)
{
d[i][j]=lcm(g[i],g[j]);
if(i==j)d[i][j]=0;
}
}
for(int k=0;k<g.size();k++)
{
for(int i=0;i<g.size();i++)
{
for(int j=0;j<g.size();j++)
{
d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
}
}
} }
void solve()
{
ll a,b;
cin>>a>>b;
if(a>b)swap(a,b);
if(a==b)cout<<0<<'\n';
else if(b%a==0)cout<<b<<'\n';
else if(gcd(a,b)>1)cout<<a+b<<'\n';
else
{
int minp_a=1,na=a;
for(int i=2;i<=a/i;i++)
{
if(na%i==0)
{
minp_a=i;
break;
}
}
if(minp_a==1)minp_a=a;
int minp_b=1,nb=b;
for(int i=2;i<=b/i;i++)
{
if(nb%i==0)
{
minp_b=i;
break;
}
}
if(minp_b==1)minp_b=b;
g.clear();
g.push_back(a);
g.push_back(b);
g.push_back(minp_a);
g.push_back(minp_b);
g.push_back(2);
floyd();
cout<<d[0][1]<<'\n';
}
} int main()
{
//freopen("sample.in","r",stdin);
//freopen("sample.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>t;
while(t--)solve();
return 0;
}

Luogu P10869 LCMs 题解 [ 黄 ] [ lcm ] [ 最短路 ]的更多相关文章

  1. NOIP2017 逛公园 题解报告 【最短路 + 拓扑序 + dp】

    题目描述 策策同学特别喜欢逛公园.公园可以看成一张NNN个点MMM条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口,NNN号点是公园的出口,每条边有一个非负权值, 代表策策经过这条边所要花 ...

  2. Luogu P1186 玛丽卡 【最短路】By cellur925

    题目描述 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们知道从一个城市到另一个城 ...

  3. HDU1181 题解(Floyd最短路)

    题面: 变形课 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Total Subm ...

  4. [Luogu P1613]跑路 (DP+倍增+最短路)

    题面 传送门:https://www.luogu.org/problemnew/show/P1613 Solution 挺有意思的一道题. 题面已经挺明显的描述出了这题的主要思想:倍增. 先这样想,我 ...

  5. 【luogu P3946 ことりのおやつ】 题解

    题目链接:https://www.luogu.org/problemnew/show/P3946 交好几遍是因为虽然能过一直有提醒..强迫症qwq #include <bits/stdc++.h ...

  6. 【Luogu】P2901牛慢跑(K短路模板)

    题目链接 K短路居然用A*……奇妙. 先建反图从终点(1)跑一遍最短路,再A*,用堆存当前点到终点距离+从起点到当前点距离. 每次取出终点都可以视为发现了一个新的最短路. #include<cs ...

  7. Luogu P3393 逃离僵尸岛【最短路】By cellur925

    题目传送门 题目大意:(其实概括出来也就基本做完了hh)在一张有$n$个点,$m$条边的无向图上,有$k$个点是不能经过的,而与之距离不超过$s$的点,到他们会花费$Q$元,到其他点会花费$p$元,求 ...

  8. Luogu P1073 最优贸易【最短路/建反图】 By cellur925

    题目传送门 这么经典的题目,还是看了lyd的题解....唉难过. 一句话题意:在一张点有全都的图上找一条从1到n的路径,存在两个点p,q(p<q),使val[q]-val[p]最大. 给出的图是 ...

  9. Luogu P2210 Haywire 题解

    其实这题吧...有一种玄学解法 这题的要求的就是一个最小化的顺序 那么,我们就不进想到了一种显然的写法 就是random_shuffle 什么?这不是乱搞的非正解吗 然而,正如一句话说的好 一个算法, ...

  10. [Luogu P4178]Tree 题解(点分治+平衡树)

    题目大意 给定一棵树,边带权,问有多少点对满足二者间距离$\leq K$,$n \leq 40000$. 题解 点分治专题首杀!$Jackpot!$ (本来看着题意比较简单想捡个软柿子捏,结果手断了… ...

随机推荐

  1. Tailwind CSS样式优先级控制

    前情 Tailwind CSS 是一个原子类 CSS 框架,它将基础的 CSS 全部拆分为原子级别,能达到最小化项目CSS.它的工作原理是扫描所有 HTML 文件.JavaScript 组件以及任何模 ...

  2. .NET开发规范v1.0

    一. 编程规范 (一) 命名风格 命名要找更有表现力的词,更专业的词,比如获取数据不用get而使用fetch 别害怕长名称,长而具有描述性的名称比短而令人费解的名称好 为作用域大的名字采用更长的名字, ...

  3. 云消息队列备份 | CKafka、TDMQ 消息队列数据备份到 COS

    前言 随着业务规模的不断扩大,企业越来越重视构建高性能.高可用的大型分布式系统.为了解决应用耦合,合理进行流量削锋,腾讯云提供了包括 CKafka 和 TDMQ 在内的一系列消息队列中间件.为了更方便 ...

  4. 中电金信:院长寄语|关于源启AI+行动的思考

    自2022年8月19日发布以来,源启已经走上了她第三年的征途.今天,源启已经成为公司战略的支点,中电金信正致力于用"源启底座""源启+咨询""源启+应 ...

  5. GienTech动态|入选软件和信息技术服务竞争力百强;参展世界计算大会、网络安全博览会

    ​ ​ ---- GienTech动态 ---- 中电金信参展广东省网络安全博览会.世界计算机大会 ​ ​ 近期,中电金信跟随中国电子参展2023年广东省网络安全博览会(下简称"博览会&qu ...

  6. 【数据库】MongoDB服务启动失败的问题。

    1.确保MongoDB所在文件夹拥有所有权限 2.确保打开CMD窗口是以管理员身份运行的 3.配置文件中的路径应该为完整路径,且不包含空格和特殊字符(不建议包含) systemLog: destina ...

  7. tar/zip命令加密压缩

    回到顶部 场景 Centos6下使用加密压缩,可以从A机器到B机器解压. 可用在kali上解压就不行. 回到顶部 命令 解包 tar zxvf FileName.tar 打包 tar czvf Fil ...

  8. SpringBoot:通过多个Context限制Bean的活动范围

    从Spring的包扫描说起 SpringBoot会扫描SpringBootApplication注解标注的类,他所在的包以及这个包的子包,把那里面的Bean注册到applicationContext中 ...

  9. Qt/C++音视频开发57-切换音视频轨道/切换节目流/分别切换音频视频轨道

    一.前言 对各种音视频文件格式的支持,是一个播放器的基础功能.一般的音视频文件只有1路流,比如音频文件只有1路音频流,视频文件只有1路音频1路视频流,实践过程中发现,还有一种ts格式的文件,可能有多路 ...

  10. Qt开发经验小技巧271-275

    编程的过程中经常遇到需要将QString转成char *或者const char *的情况,在转换成QByteArray后调用.data()或者.constData()函数进行转换,这里需要注意的是, ...