解题思路:可以将题目理解成一张图 同时每条边的长度就是1 并且每个点到其他点的最远距离都是一样的 所以存储了图之后跑一次dijkstra算法即可
注意事项:距离数组初始化成无穷大
参考代码:
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
const int N = 1e5 + 5;
typedef pair<int, int> pii;
priority_queue<pii, vector<pii>, greater<pii>> q;//小根堆 每次弹出距离最近的点
vector<int> m[N];
bool vis[N];
int n, k, dis[N];
//将各个节点转化为一张有向图 因为任意点的最远距离是一样的 跑一次DJ即可
int main()
{
cin >> n >> k;
for (int i = 0; i < n; i++) {
m[i].push_back((i + 1) % n);
m[i].push_back((i + k) % n);
}
memset(dis, INF, sizeof dis);
q.push({ 0,0 });
dis[0] = 0;
while (!q.empty()) {
auto temp = q.top(); q.pop();
int u = temp.second;
if (vis[u]) continue;
vis[u] = 1;
for (int v : m[u]) {
if (dis[v] > dis[u] + 1) {
dis[v] = dis[u] + 1;
q.push({ dis[v],v });
}
}
}
int ans = *max_element(dis, dis + n);
cout << ans << endl;
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复