1 solutions

  • 0
    @ 2024-12-5 18:10:17

    C++ :

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 100100;
    int dis[maxn][2], n, m, q;
    vector<int> g[maxn];
    struct Node {
        int u, s;
        Node (int _u, int _s) { u = _u; s = _s; }
    };
    queue<Node> que;
    bool inq[maxn][2];
    void spfa() {
        memset(inq, 0, sizeof(inq));
        memset(dis, -1, sizeof(dis));
        dis[1][0] = 0;
        que.push(Node(1, 0));
        while (!que.empty()) {
            Node nd = que.front();
            que.pop();
            int u = nd.u, s = nd.s;
            inq[u][s] = false;
            int sz = g[u].size();
            for (int i = 0; i < sz; i ++) {
                int v = g[u][i];
                if (dis[v][s^1] == -1 || dis[v][s^1] > dis[u][s] + 1) {
                    dis[v][s^1] = dis[u][s] + 1;
                    if (!inq[v][s^1]) {
                        inq[v][s^1] = true;
                        que.push(Node(v, s^1));
                    }
                }
            }
        }
    }
    int main() {
        cin >> n >> m >> q;
        while (m --) {
            int x, y;
            cin >> x >> y;
            g[x].push_back(y);
            g[y].push_back(x);
        }
        spfa();
        if (g[1].size() == 0) {
            while (q --) puts("No");
        }
        else {
            while (q --) {
                int a, L;
                cin >> a >> L;
                puts( dis[a][L%2] != -1 && dis[a][L%2] <= L ? "Yes" : "No" );
            }
        }
        return 0;
    }
    
    • 1

    Information

    ID
    9121
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By