1 solutions
-
0
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