专栏文章
题解:P14079 [GESP202509 八级] 最短距离
P14079题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @minqepfr
- 此快照首次捕获于
- 2025/12/02 06:39 3 个月前
- 此快照最后确认于
- 2025/12/02 06:39 3 个月前
题意:对于一个有 的带全无向图,规定其中两个互质的节点所连的边权值为 ,否则为 ,求节点 到 的最短权值和。
一眼看到以为是Floyd板子,然后读了发现只是个简单的数学题。
设最小路径长度为 。
考虑2种情况: 和 互质或不互质。每种情况中又分为三种小情况:直接连边,过节点1(两条互质路径和)和过最小公倍数节点(两条不互质路径和)。
对于第1种:当直接连边时,;过节点1时,;过最小公倍数节点时,。综上,当 和 互质时,。
对于第2种:当直接连边时,;过节点1时,;过最小公倍数节点时,。综上,当 和 互质时,。
特殊地,当 或 时,;当 时,。
然后分类讨论即可。
AC Code:
CPP#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,p,q;
int main(){
scanf("%lld%lld%lld",&n,&p,&q);
for(int i=1;i<=n;++i){
ll a,b;
scanf("%lld%lld",&a,&b);
if(a==b){
cout<<0<<'\n';
continue;
}
if(a==1||b==1){
cout<<p<<'\n';
continue;
}
if(__gcd(a,b)==1){
cout<<min(2*q,p)<<'\n';
continue;
}
cout<<min(2*p,q)<<'\n';
}
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...