专栏文章
题解:P14079 [GESP202509 八级] 最短距离
P14079题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @minqwon9
- 此快照首次捕获于
- 2025/12/02 06:53 3 个月前
- 此快照最后确认于
- 2025/12/02 06:53 3 个月前
这题一看就是要 以内出结果的题 !!! (别问我怎么知道的)。
本题就是说对于两个数 和 , 若 , 则连一条边权为 的边, 否则连一条边权为 的边。 问 和 的最短路。
我们分两种情况讨论:
-
当 时, 可以等于 ,也可以等于 , 因为可以先从点 到点 , 再从点 到点 。
-
当 时, 可以等于 ,也可以等于 , 因为可以先从点 到点 , 再从点 到点 。
但是还要特判一下 !!!
当 时, 。
当 或 时, 。
以上就是正解思路了。
时间复杂度 , 可以通过本题。
空间复杂度 , 包可以通过本题的。
最后, 你们最爱的代码来了 !!!
CPP#include <bits/stdc++.h>
using namespace std;
#define LL long long
int n;
LL ans, p, q, a, b, g;
int main() {
scanf("%d%lld%lld", &n, &p, &q);
while(n --) {
ans = 1e18;
scanf("%lld%lld", &a, &b);
if(a == b) {
puts("0");
continue;
}
if(a == 1 || b == 1) {
printf("%lld\n", p);
continue;
}
g = __gcd(a, b);
if(g == 1) ans = min(p, q * 2);
else ans = min(q, p * 2);
printf("%lld\n", ans);
}
return 0;
}
代码很简单, 按上面的思路做就行。
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...