#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int bfs(int start, int end, const vector<vector<int>>& adj_list, int n) {
vector<int> visited(n + 1, -1);
queue<int> q;
visited[start] = 0;
q.push(start);
while (!q.empty()) {
int current = q.front();
q.pop();
for (int neighbor : adj_list[current]) {
if (visited[neighbor] == -1) {
visited[neighbor] = visited[current] + 1;
if (neighbor == end) {
return visited[neighbor];
}
q.push(neighbor);
}
}
}
return -1;
}
vector<int> solve_circle_passing(int n, int m, const vector<pair<int, int>>& best_friend_pairs, const vector<pair<int, int>>& games) {
vector<vector<int>> adj_list(n + 1);
for (int i = 1; i <= n; ++i) {
adj_list[i].push_back(i % n + 1);
adj_list[i % n + 1].push_back(i);
}
for (const auto& pair : best_friend_pairs) {
adj_list[pair.first].push_back(pair.second);
adj_list[pair.second].push_back(pair.first);
}
vector<int> results;
for (const auto& game : games) {
results.push_back(bfs(game.first, game.second, adj_list, n));
}
return results;
}
int main() {
int n, m, k;
cin >> n >> m >> k;
vector<pair<int, int>> best_friend_pairs(m);
for (int i = 0; i < m; ++i) {
cin >> best_friend_pairs[i].first >> best_friend_pairs[i].second;
}
vector<pair<int, int>> games(k);
for (int i = 0; i < k; ++i) {
cin >> games[i].first >> games[i].second;
}
vector<int> results = solve_circle_passing(n, m, best_friend_pairs, games);
for (int result : results) {
cout << result << endl;
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |