dijkstraWA20求调
查看原帖
dijkstraWA20求调
1272259
cgxd楼主2024/8/22 22:51
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
int n, k, ans[maxn];
int turn(int now, int op){
	op *= k;
	return (now + op + n) % n;
}bitset<maxn> vis;
multimap<int, int> m;
int dijkstra(int x){
	fill(ans, ans + n, INT_MAX);
	m.insert(pair<int, int>(ans[x] = 0, x));
	while(m.size()){
		int x = m.begin() -> second;
		m.erase(m.begin());
		if(vis[x]) continue;
		vis[x] = 1;
		for(int i = -1; i <= 1; i += 2){
			int y = turn(x, i);
			if(ans[y] > ans[x] + 1)
				m.insert(pair<int, int>(ans[y] = ans[x] + 1, y));
		}
	}return *max_element(ans, ans + n);
}signed main(){
	scanf("%d%d", &n, &k);
	printf("%d", dijkstra(1));
	return 0;
}
2024/8/22 22:51
加载中...