Submission #1099385

#TimeUsernameProblemLanguageResultExecution timeMemory
1099385mihaihvhCircle Passing (EGOI24_circlepassing)C++14
0 / 100
2072 ms95744 KiB
#include <iostream>
#include <set>
#include <queue>
#include <vector>

using namespace std;

vector<set<int>> v(1000000);
vector<pair<int, int>> Q;


int n, m, q;
int M;

void bf(int k, int l) {
    //int viz[20001]{0};
    vector<int> viz(2*n);
    queue<int> q;
    viz[k] = 1;
    q.push(k);
    while (!q.empty()) {
        for (auto m : v[q.front()]) {
            if (!viz[m]) {
                q.push(m);
                viz[m] = viz[q.front()] + 1;
            }
        }
        q.pop();
    }
    cout << viz[l] - 1 << '\n';
}

int main() {
    cin >> n >> m >> q;

    for (int i = 0; i < m; ++i) {
        cin >> M;
        v[M].insert(M+n);
        v[M+n].insert(M);
    }
    for (int i = 0; i < 2*n; ++i) {
        if (i == 0)
            v[i].insert(2*n-1);
        if (i == 2*n-1)
            v[i].insert(0);
        if (i < 2*n-1) v[i].insert(i+1);
        if (i > 0) v[i].insert(i-1);
    }

    for (int i = 0; i < q; ++i) {
        for (int j = 0; j < m; ++j) {
            int a, b;
            cin >> a >> b;
            Q.push_back(make_pair(a, b));
        }
    }

    for (auto p : Q) {
        bf(p.first, p.second);
    }

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...