제출 #1364203

#제출 시각아이디문제언어결과실행 시간메모리
1364203avahwCircle Passing (EGOI24_circlepassing)C++20
20 / 100
2096 ms1114112 KiB
#include <bits/stdc++.h>
using namespace std;

int bfs(int start, int end, int n, set<pair<int, int>>& frens){
    queue<int> q;
    vector<bool> seen(n * 2);
    vector<int> dists(n * 2, INT_MAX);
    q.push(start);
    dists[start] = 0;
    while(!q.empty()){
        int node = q.front();
        q.pop();
        if(seen[node]) continue;
        // cout << "current node: " << node << "\n";
        seen[node] = true;
        // add direct neighbours
        if(node == 0){
            q.push(1);
            q.push(2*n -1);
            dists[1] = min(dists[node] + 1, dists[1]);
            dists[2*n -1] = min(dists[node] + 1, dists[2*n - 1]);
        }
        else if(node == 2*n -1){
            q.push(0);
            q.push(node - 1);
            dists[node - 1] = min(dists[node] + 1, dists[node - 1]);
            dists[0] = min(dists[0], dists[node] + 1);
        }
        else{
            q.push(node + 1);
            q.push(node - 1);
            dists[node - 1] = min(dists[node -1], dists[node] + 1);
            dists[node + 1] = min(dists[node + 1], dists[node] + 1);
        }
        // check if they have a friend
        if(frens.find({node, node + n}) != frens.end()){
            // cout << "found friend at " << node + n << "\n";
            q.push(node + n);
            dists[node + n] = min(dists[node + n], dists[node] + 1);
        }
        if(frens.find({node - n, node}) != frens.end()){
            // cout << "found friend at " << node - n << "\n";
            q.push(node - n);
            dists[node - n] = min(dists[node - n], dists[node] + 1);
        }
    }
    return dists[end];
}


int main(){
    cin.tie(0);
    ios::sync_with_stdio(0);
    int ppl, f, qs;
    cin >> ppl >> f >> qs;
    set<pair<int, int>> frens;
    for(int i = 0; i < f; i++){
        int pers;
        cin >> pers;
        frens.insert({pers, pers + ppl});
    }
    for(int i = 0; i < qs; i++){
        int a, b;
        cin >> a >> b;
        cout << bfs(a, b, ppl, frens) << "\n";
    }
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…